Linuxターミナルで2014年から2020年までのうるう年を調べるにはどうすればよいですか?
$cal
のようなコードを使用する方法はありますか?2014年から2020年までのうるう年をすぐに示すものはありますか?
date
の終了コードを使用してうるう年を確認することができます。無効な日付に対して0以外の終了コードを生成する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
あなたの質問について:
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日に設定し、発生したエラーを無視して年を出力します。
スタックオーバーフローについて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
うるう年の付随する「不可解な」特性(その可分性、1年の日数、特定の日の存在など)に依存したくない場合は、適切なカレンダーライブラリでプログラミング言語を使用する必要があります。関数。 Pythonをお勧めします calendar.isleap()
1、2:
#!/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 Pythonのcalendar
モジュールは 予後グレゴリオ暦 を使用します。 e。 G.カレンダーを無期限に過去と未来に拡張します。 G.カレンダーが1582年にのみ効力を発したことや、一部のロケールが異なるうるう年規則を持つ他のカレンダーを引き続き使用することは考慮されていません。他のカレンダーのサポートが必要な場合、e。 g。ユリウス暦では、適切なPython拡張モジュールをインストールして使用することをお勧めします。