আমি কীভাবে পরীক্ষা করব যে কোন বছরগুলি লিপ বছর?


19

লিনাক্স টার্মিনালে 2014 এবং 2020 এর মধ্যে লিপ বছরগুলি কীভাবে খুঁজে পেতে পারি?

$cal2014 এবং 2020 এর মধ্যে সরাসরি কোন বছরগুলি লিপ বছরগুলি রয়েছে তা দেখানোর জন্য কিছু কোড ব্যবহার করার কোনও উপায় আছে কি ?


উত্তর:


39

আপনি কোনও অবৈধ তারিখের জন্য একটি 0 অ-বহির্গমন কোড তৈরির আচরণের dateউপর নির্ভর করে, একটি লিপ বছরের জন্য পরীক্ষা করার জন্য প্রস্থান কোডটি ব্যবহার করতে পারেন date, অবিকৃতভাবে একটি অ-লিপ বছরে ২৯ শে ফেব্রুয়ারি নেই:

date -d $year-02-29 &>/dev/null
echo $?

একটি ফাংশন হিসাবে:

isleap() { date -d $1-02-29 &>/dev/null && echo is leap || echo is not leap; }

ব্যবহার:

$ isleap 2019
is not leap

$ isleap 2020
is leap

আপনার প্রশ্ন সম্পর্কে:

লিনাক্স টার্মিনালে 2014 এবং 2020 এর মধ্যে লিপ বছরগুলি কীভাবে খুঁজে পেতে পারি?

echo "Leap years between 2014 and 2020:";
for y in {2014..2020}; do
    date -d $y-02-29 &>/dev/null && echo $y;
done

কেন এটি ম্যাক টার্মিনালটিতে কাজ করছে না
Le

আমি আশা করি আপনি জিজ্ঞাসা উপর Mac এর জন্য একটি সমাধান জন্য অনুরোধ করা হয়নি উবুন্টু ... এই দেখুন OSX তারিখ কমান্ড
pLumo

9

@ রোভোর উত্তরের একটি বৈকল্পিক ...

for a in {2014..2020}
do 
  date -d $a-02-29 +"%Y" 2>/dev/null
done

date -d $a-02-29 +"%Y" 2> /dev/null 29 ফেব্রুয়ারির তারিখ নির্ধারণ করে এবং ঘটে যাওয়া কোনও ত্রুটি উপেক্ষা করে বছরের মুদ্রণ করে।


3
বা এমনকিseq -f "%g-02-29" 2014 2020 | date -f- +"%Y" 2>/dev/null
ডিজিটাল ট্রমা

@ ডিজিটালট্রামা: খুব দুর্দান্ত!

7

এখানে স্ট্যাক ওভারফ্লোতে, একটি মার্জিত সমাধান অনুভা দ্বারা সরবরাহ করা হয়েছিল :

#!/bin/bash
(( !($1 % 4) && ( $1 % 100 || !( $1 % 400) ) )) &&
echo "leap year" || echo "not a leap"
exit 0

নামের একটি পাঠ্য ফাইলগুলিতে উপরের সংরক্ষণ করুন isleap

নির্বাহের অনুমতি সেট করতে ভুলবেন না:

chmod +x isleap

এটা পরীক্ষা করো:

$ ./isleap 1900
not a leap
$ ./isleap 2000
leap year

এটা সঠিক উত্তর. dateকমান্ডটিতে একটি নির্বিচারে প্রয়োগের উপর নির্ভর করে অন্যরা হ্যাক।
ডকসালভেজার

3

আপনি যদি লিপ বছরের কিছু ঘটনামূলক "আরকেন" বৈশিষ্ট্যের উপর নির্ভর করতে না চান (যেমন তাদের বিভাজন, এক বছরে কত দিন বা একটি নির্দিষ্ট দিনের অস্তিত্ব) আপনার উপযুক্ত ক্যালেন্ডার লাইব্রেরি সহ একটি প্রোগ্রামিং ভাষা ব্যবহার করা উচিত ফাংশন। আমি পাইথনের 1, 2 :calendar.isleap()

#!/usr/bin/python3
import sys
import traceback
import calendar

try:
    year = int(sys.argv[1])
    is_leap = calendar.isleap(year)
except:
    traceback.print_exc()
    sys.exit(2)

print(is_leap)  # Print the year’s leap status
sys.exit(not is_leap)  # Exit program with "success" if leap and "failure" otherwise

ব্যবহার:

$ python3 is_leap.py 2000
True
$ python3 is_leap.py 2100
False

বা ওয়ান-লাইনার হিসাবে (সঠিক ত্রুটি পরিচালনা না করে):

$ python3 -c 'import sys, calendar; print(calendar.isleap(int(sys.argv[1])))' 2000
True
$ python3 -c 'import sys, calendar; sys.exit(not calendar.isleap(int(sys.argv[1])))' 2000
$ echo $?
0

1 আমি নিশ্চিত একটি সাধারণ সমতুল্য পার্ল সমাধান রয়েছে।

2 পাইথনের calendarমডিউলটি প্রোলেপটিক গ্রেগরিয়ান ক্যালেন্ডার ব্যবহার করে , অর্থাৎ এটি জি ক্যালেন্ডারকে অনির্দিষ্টকালের জন্য অতীত ও ভবিষ্যতে প্রসারিত করে। জি ক্যালেন্ডারটি কেবল 1582 সালে কার্যকর হয়েছিল বা কিছু লোকেল বিভিন্ন লিপ বর্ষের নিয়ম সহ অন্যান্য ক্যালেন্ডার ব্যবহার অব্যাহত রাখে তা বিবেচনায় নেওয়া হয় না। আপনার যদি অন্যান্য ক্যালেন্ডারগুলির জন্য সমর্থন প্রয়োজন, যেমন জুলিয়ান ক্যালেন্ডার, আমি আপনাকে একটি উপযুক্ত পাইথন এক্সটেনশন মডিউলটি ইনস্টল এবং ব্যবহার করার পরামর্শ দিই।


Calendar.py থেকে: def isleap(year): """Return True for leap years, False for non-leap years.""" return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)। একই fct। Askubuntu.com/a/1081237/790920
abu_bua

@ বাবু_বায়া: হ্যাঁ, তবে চাকাটি পুনরায় উদ্ভাবন না করার অর্থ আপনি তার আসল উদ্ভাবক হিসাবে একই ভুল (এমনকি টাইপস )ও করবেন না। এটি ধরে নেওয়া হচ্ছে যে আপনি সেই উদ্ভাবকের কাজের উপর নির্ভর করেন। পাইথন কোর মডিউলগুলি সাধারণত ভালভাবে বজায় থাকে।
ডেভিড ফোস্টার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.