前日・翌日の取得
実行日の前日・翌日を取得するのであれば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関数
・現在の日時を求める
