My Y2020 Bug | Tom Wyant [blogs.perl.org]
http://blogs.perl.org/users/tom_wyant/2020/01/my-y2020-bug.html
以下のコードを実行すると、1970-01-01が欲しい所に、2070-01-01が返ってくるという問題。
#!/usr/bin/perl use 5.028; use warnings; use POSIX qw(strftime); use Time::Local; my $t = timegm(0, 0, 0, 1, 0, 70); say strftime("%Y-%m-%d %H:%M:%S", gmtime($t));
2070-01-01 00:00:00
https://metacpan.org/pod/Time::Local#Year-Value-Interpretation
Years in the range 0..99 are interpreted as shorthand for years in the rolling "current century," defined as 50 years on either side of the current year.
(snip)
Whenever possible, use an absolute four digit year instead.
Time::Localの仕様として、年数に2桁の値を与えた場合、19xx年と20xx年、現在の時間から近い年を取るらしい。
Perlが保守できるフレンズ
つまり、これからは 70年代の話をするときは、2070年代の話しなんだなって 考えないといかんってことだね。