前日・翌日の取得
実行日の前日・翌日を取得するのであればtimeとlocaltimeを使えば簡単です。
sub show_date { my $tm = shift; my ($day, $month, $year) = (localtime($tm))[3..5]; printf "%04d/%02d/%02d\n", $year + 1900, $month + 1, $day; } # 前日を表示 show_date(time - 24 * 3600); # 翌日を表示 show_date(time + 24 * 3600);また特定の日の前日・翌日を取得するには、Time::Localモジュールと上記の方法を組み合わせて使います。
use Time::Local; sub show_date { my $tm = shift; my ($day, $month, $year) = (localtime($tm))[3..5]; printf "%04d/%02d/%02d\n", $year + 1900, $month + 1, $day; } sub get_tm { my $year = shift; my $month = shift; my $day = shift; return timelocal(0, 0, 0, $day, $month - 1, $year - 1900); } my $tm = get_tm(2002, 7, 7); # 前日を表示 show_date($tm - 24 * 3600); # 翌日を表示 show_date($tm + 24 * 3600);Date::Simpleを使うともっと簡単です。
# 当日の前日・翌日を表示 use Date::Simple; my $today = Date::Simple->new(); my $yesterday = $today->prev; my $tomorrow = $today->next; print $yesterday->format("%Y/%m/%d"), "\n"; print $tomorrow->format("%Y/%m/%d"), "\n";
# 特定日の前日・翌日を表示 use Date::Simple; my $day = Date::Simple->new(2006, 1, 1); my $yesterday = $day->prev; my $tomorrow = $day->next; print $yesterday->format("%Y/%m/%d"), "\n"; print $tomorrow->format("%Y/%m/%d"), "\n";
関連項目
・localtime関数・time関数
・現在の日時を求める