Perlの組み込み関数localtime()について

[上に] [前に] [次に]
ぴー 1998/12/16(水) 16:19:14
Perlでlocaltime()関数を使って、日付計算の
プログラム(たとえば今日から30日前の年月日は?)
を作りかけていて四苦八苦しています。

とほほさんのPerlリファレンス localtime()では、

    ($sec, $min, $hour, $mday, $mon, $year,
        $wday, $yday, $isdst) =
         localtime($tt);
$sec, $min, ...はそれぞれ、秒数(0-59)、分(0-59)、時(0-23)、
日(1-31)、月(0-11)、年(1900年からの年数(西暦の下2桁ではない))、
曜日(日(0)-土(6))、年日数(1月1日を0とする)、
$isdst(夏時間なら0以外の値)を表わす。

となっています。
そこで、この$yearについて<西暦の下2桁ではない>
というところが気になっています。
つまり、2000年になると$yearの値は100になると
いうことと考えてOKですか?

今話題の2000年問題では、下2桁でしか持ってい
ないから、どうのこうの...

この部分のテストはどうすればできるのだろう...

B-Cus 1998/12/16(水) 16:35:36
> つまり、2000年になると$yearの値は100になると
> いうことと考えてOKですか?

そうです。

> この部分のテストはどうすればできるのだろう...

PCの時計を進めて試せばいいのでは。あるいは

 require 'timelocal.pl';

 # 2001年6月4日3時2分1秒の時点での1970年1月1日0時0分0秒
 # からの経過秒数を$timeに代入
 $time = &timelocal(1,2,3,4,5,101);

 # 1970年1月1日0時0分0秒から$time秒だけ経過した時点の
 # 年月日時分秒を得る
 ($sec, $min, $hour, $mday, $mon, $year) = localtime($time);

 print "$sec, $min, $hour, $mday, $mon, $year\n";

とか。

でもこれはtimelocalが正しい、という前提があってはじめて成り立つ
テストでしょうか。

ぴー 1998/12/16(水) 16:55:16
B-Cusさん。
大変参考になりました。
どうやら上手くできそうな気がしてきました。
ありがとうございました。

ぴー 1998/12/16(水) 17:05:47
[[解決]]
解決ですね。失礼しました。

[上に] [前に] [次に]