春分の日の計算を誰が見ても根拠がわかるようにPerlで記述する
んと個人的にTwitter botを作っている関係で春分の日になんかしゃべらすようなことを考えるわけだけれども、春分の日の計算アルゴリズムっつうのがあって、それを後で見たときに客観的に分かりやっすい方法をと考えた結果がこれだよ!
use strict;
use warnings;
use DateTime;
# 1900年~2099年までの春分の日の数学的な簡易な求め方
# http://ja.wikipedia.org/w/index.php?title=%E6%98%A5%E5%88%86%E3%81%AE%E6%97%A5&oldid=28472639
# 西暦年数の4での剰余が0の場合
# 1900年~1956年までは3月21日
# 1960年~2088年までは3月20日
# 2092年~2096年までは3月19日
# 西暦年数の4での剰余が1の場合
# 1901年~1989年までは3月21日
# 1993年~2097年までは3月20日
# 西暦年数の4での剰余が2の場合
# 1902年~2022年までは3月21日
# 2026年~2098年までは3月20日
# 西暦年数の4での剰余が3の場合
# 1903年~1923年までは3月22日
# 1927年~2055年までは3月21日
# 2059年~2099年までは3月20日
my $now = DateTime->now();
my $year = $now->year;
my $mod = $year % 4;
my $syunbun;
if ( $mod == 0 ) {
if ( 1900 <= $year && $year <= 1956 ) {
$syunbun = '0321'
}
elsif ( 1960 <= $year && $year <= 2088 ) {
$syunbun = '0320'
}
elsif ( 2092 <= $year && $year <= 2096) {
$syunbun = '0319'
}
}
elsif ( $mod == 1 ) {
if ( 1901 <= $year && $year <= 1989 ) {
$syunbun = '0321'
}
elsif ( 1993 <= $year && $year <= 2097 ) {
$syunbun = '0320'
}
}
elsif ( $mod == 2 ) {
if ( 1902 <= $year && $year <= 2022 ) {
$syunbun = '0321'
}
elsif ( 2026 <= $year && $year <= 2098 ) {
$syunbun = '0320'
}
}
elsif ( $mod == 3 ) {
if ( 1903 <= $year && $year <= 1923 ) {
$syunbun = '0322'
}
elsif ( 1927 <= $year && $year <= 2055 ) {
$syunbun = '0321'
}
elsif ( 2059 <= $year && $year <= 2099) {
$syunbun = '0320'
}
}
print "$syunbun\n";
exit;
__END__
どうせメンテが必要になるんだからとにかく日本語の文章とif文との対比が付けば意味がわかるという線でやってみた。参照元のWikipediaの固有版のURLも貼っているので、その当時は正しかったんだ!ていう主張もできると思うんだけど。
トラックバック
この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/19018/47864205
この記事へのトラックバック一覧です: 春分の日の計算を誰が見ても根拠がわかるようにPerlで記述する:


![: SANYO NEW eneloop 充電式ニッケル水素電池(単3形2個パック) [HR-3UTGA-2BP]](http://ecx.images-amazon.com/images/I/51V83UYI5kL._SL75_.jpg)


![: デジモンアドベンチャー ぼくらのウォーゲーム!/デジモンアドベンチャー【劇場版】 [DVD]](http://ecx.images-amazon.com/images/I/617JZ13THTL._SL75_.jpg)

















![: サマーウォーズ [Blu-ray]](http://ecx.images-amazon.com/images/I/51ZDAy7c8KL._SL75_.jpg)
![: サマーウォーズ [DVD]](http://ecx.images-amazon.com/images/I/419nVKBEIkL._SL75_.jpg)



































