जवाबों:
आप date
एक लीप वर्ष की जाँच के लिए 'एग्जिट कोड' का उपयोग कर सकते हैं , date
किसी अमान्य दिनांक के लिए नॉन 0 एग्जिट कोड बनाने के व्यवहार पर भरोसा करते हुए , एक गैर-लीप वर्ष में फ़रवरी का कोई 29 वाँ हिस्सा नहीं है:
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
बस @ RoVo के उत्तर का एक संस्करण ...
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 फरवरी को तिथि निर्धारित करता है और वर्ष प्रिंट करता है।
seq -f "%g-02-29" 2014 2020 | date -f- +"%Y" 2>/dev/null
स्टैक ओवरफ्लो पर, शुभता द्वारा एक सुंदर समाधान प्रदान किया गया था :
#!/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
कमांड में एक मनमाना कार्यान्वयन पर निर्भर हैं, वे हैक हैं।
यदि आप लीप वर्ष के कुछ आकस्मिक "रहस्यमय" गुणों पर भरोसा नहीं करना चाहते हैं (जैसे कि उनकी विभाज्यता, वर्ष में दिनों की संख्या, या एक विशिष्ट दिन का अस्तित्व) तो आपको एक उपयुक्त कैलेंडर लाइब्रेरी के साथ प्रोग्रामिंग भाषा का उपयोग करना चाहिए समारोह। मैं पायथन के 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 में प्रभावी हुआ या कुछ स्थान अलग-अलग लीवर वर्ष के नियमों के साथ अन्य कैलेंडर का उपयोग करना जारी रखते हैं। यदि आपको अन्य कैलेंडर के लिए समर्थन की आवश्यकता है, उदाहरण के लिए जूलियन कैलेंडर, तो मैं आपको उपयुक्त पायथन एक्सटेंशन मॉड्यूल को स्थापित करने और उपयोग करने की सलाह देता हूं।
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