うろぐ

インターネットサービス&デジタル家電&デジタルカメラ&パソコンのレビュー

PerlのモジュールのTime::Localの使い方ですが、ネットで調べたときに誤ったソースが多く見受けられたので、備忘録としてここに書き留めておきます。

Time::Localは人間が見やすい日時をコンピュータが扱いやすい秒に変換するモジュールです。
例えば、「2011-03-31 18:00:00」をTime::Localで変換すると「1301562000」になります。
秒の開始の基準はMacを除くと1970/1/1 00:00:00です。(Macは1904/1/1 00:00:00が基準)

わたしがどの様な場合に使うかというと、将来、あるいは過去の日時を扱うプログラムを作成したときに、「過去1週間以内の該当するデータを取り出す」あるいは「将来2週間以内の該当するデータを取り出す」という操作をさせるときに、秒で日時がデータベースに格納されていると、扱うのが楽になります。
1時間は「60(秒)*60(分)」なので3600秒です。
1日は3600*24(時間)で86400秒になります。
一週間なら86400*7となり604800、二週間なら86400*14となり1209600秒です。

以下、ソースです。

$yy = 1981;
$mm = $mm -1;
$dd = 18;
$hour = “00”;
$minute = “00”;
$sec = “00”;
my $someday_sec_from_epoch = timelocal( $sec, $minute, $hour, $dd, $mm, $yy );

月から1を引かないとエラーが返されるときがあります。
エラーを返されなかったとしても、一月ずれてしまいます。

もう一つの注意点は、誕生日など時間、分、秒が不要な場合でも、「00」の値が必要なことです。
「0」ではエラーとなりますので、数字ではなく文字としてダブルクオート、シングルクオートで「00」をくくってあげる必要があります。

3月 18th, 2011

Posted In: CGI(Perl)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です