답변:
date
의 종료 코드를 사용 하여 윤년을 확인할 수 있습니다. date
의 유효하지 않은 날짜에 0이 아닌 종료 코드를 생성하는 동작에 의존 합니다. 분명히 윤년이 아닌 2 월 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
당신의 질문에 관하여 :
Linux 터미널에서 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
날짜를 2 월 29 일로 설정하고 발생하는 모든 오류를 무시하고 연도를 인쇄합니다.
seq -f "%g-02-29" 2014 2020 | date -f- +"%Y" 2>/dev/null
Stack Overflow에서 anubhava 는 우아한 솔루션을 제공했습니다 .
#!/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
명령 에서 임의의 구현에 의존하는 다른 것은 해킹입니다.
윤년의 일부 우연한 "arcane"속성 (분 산성, 1 년의 일수 또는 특정 날짜의 존재와 같은)에 의존하지 않으려면 적절한 달력 라이브러리가있는 프로그래밍 언어를 사용해야합니다 함수. 나는 파이썬의 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 간단한 Perl 솔루션이 있다고 확신합니다.
2 파이썬 calendar
모듈은 다발성 그레고리력을 사용합니다 . 즉, G. 달력을 과거와 미래로 무한정 확장합니다. G. 달력은 1582 년에만 적용되었거나 일부 로케일은 다른 윤년 규칙을 가진 다른 달력을 계속 사용한다는 점을 고려하지 않습니다. Julian 캘린더와 같은 다른 캘린더를 지원해야하는 경우 적절한 Python 확장 모듈을 설치하고 사용하는 것이 좋습니다.
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