Cから継承したAPI
プログラマにとって,
ただし,
use strict;
use warnings;
# 短いけれど非直感的
my @tm = localtime(); $tm[5] += 1900; $tm[4]++;
printf "%04d-%02d-%02d %02d:%02d:%02d\n", reverse(@tm[0..5]);
# わかりやすいけれど冗長
my ($sec, $min, $hour, $day, $mon, $year) = localtime();
$year += 1900; $mon++;
printf "%04d-%02d-%02d %02d:%02d:%02d\n",
$year, $mon, $day, $hour, $min, $sec;
配列から構造体へ
そのため,
use strict;
use warnings;
use Time::localtime;
my $tm = localtime();
printf "%04d-%02d-%02d %02d:%02d:%02d",
$tm->year + 1900, $tm->mon + 1, $tm->mday,
$tm->hour, $tm->min, $tm->sec;
もっとも,
ラリーの仕様から生まれたTime::Piece
氏は,
そのメールに反応して生まれたのが
Time::Pieceを使うと,
use strict;
use warnings;
use Time::Piece;
my $tm = localtime();
printf "%04d-%02d-%02d %02d:%02d:%02d",
$tm->year, $tm->mon, $tm->mday, $tm->hour, $tm->min, $tm->sec;
また,
print $tm->ymd, ' ', $tm->hms, "\n";
print $tm->strftime('%Y-%m-%d %H:%M:%S'), "\n";
また,
use strict;
use warnings;
use Time::Piece;
use Time::Seconds;
my $tm = localtime() + ONE_DAY;
print $tm->datetime, "\n";
YAPCまでの日数を求めたければこのように書けます。
use strict;
use warnings;
use Time::Piece;
my $yapc = Time::Piece->strptime('2009-09-10', '%Y-%m-%d');
my $delta = $yapc - localtime();
print int($delta->days), "\n";
日時関連モジュールの混沌
このTime::Pieceは,
ところが,
このような議論はDate::Calc,
- ※2
コアに取り込んでしまうとPerlをサポートするすべてのプラットフォームで正しく動作するようフォローする作業が発生するため,
不要なモジュールはなるべくコアには入れないことになっています。その (当時の) 判断基準については, このメールなどに紹介されています。