Perlについて (843レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
768: デフォルトの名無しさん [] 2020/01/01(水) 14:14:05.07 ID:fUaq4dOi(1/3) AAS
以前ローカルタイムとGMTの秒数のずれを出すためにこんな風に書いた。

use Time::Local;

my $t = timegm(localtime(0));

これは昨日までは正常に動いた。ローカルタイムが日本時間(JST)なら9時間を秒に直した 32400 が返されていた。

しかし今日(2020年1月1日)になったらいきなり巨大な数を返すようになった。
ローカルタイムが JST なら 3155792400 になる。そしてこれは32bitのOSではエラーになった。
(整数のビット数が多くなるように Perl がコンパイルされていれば大丈夫なのかも知れないが)。

この巨大な数はなんなのかと調べてみたら、2070年だった。

$ date -d '@3155792400'
2070年 1月 1日 水曜日 18:00:00 JST
$

で、結局これは timegm() の年に与える数が4桁の西暦年になるように修正したらうまく行った。

use Time::Local;

my @tt = localtime(0);
$tt[5] += 1900;
my $t = timegm(@tt);

これでローカルタイムが日本時間なら 32400 になる。(OSが32bitでも問題なし)。

でもこれ、なんか変だよね? バグじゃないのか? 2020年にいきなり変わるって、元からそういう仕様だったの?
770: デフォルトの名無しさん [] 2020/01/01(水) 16:16:55.11 ID:fUaq4dOi(2/3) AAS
>>769
わかった。ソース見てわかった。50年な。今年の年に50足して100で割った余りを区切りにするから70が区切りで、70未満は今年の世紀の2000足しちゃうのな。
どうりで71年からはちゃんと計算できると思ったら。
771: デフォルトの名無しさん [] 2020/01/01(水) 16:17:56.87 ID:fUaq4dOi(3/3) AAS
未満じゃない。以下か。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.046s