師匠の散歩

きままにPerlでも

時間・日付

時間・日付を表示する/ time.cgi

翌日と前日

方法はWebでいくつか紹介されているが、問題なく動作したものを紹介する。

1960年以前、2037年以降、本方法について正確さの保障はしない。

確認したサーバー
Strawberry/perl 5, version 12, subversion 1 (WindowsXP)
v5.005_03 built for i386-freebsd
v5.10.1 (*) built for i386-freebsd-64int

今日の翌日と前日

# 1900/1/1からの秒数 から 日付 を求める
sub show_date {
    my $tm = shift;
    my ($day, $month, $year) = (localtime($tm))[3..5];
    return sprintf('%04d-%02d-%02d',$year + 1900, $month + 1, $day);
}
# 本日の秒数は、time で得られる
show_date(time);
# 前日
show_date(time - 24 * 3600);
# 翌日
show_date(time + 24 * 3600);
経過秒数timeは1632482907
本日は:2021-09-24
昨日は:2021-09-23
明日は:2021-09-25

timeモジュールを使って前日・翌日計算

use Time::Local;
# 1900/1/1からの秒数 から 日付 を求める
sub show_date {
    my $tm = shift;
    my ($day, $month, $year) = (localtime($tm))[3..5];
    return sprintf('%04d-%02d-%02d',$year + 1900, $month + 1, $day);
}
# ある年月日の、1900/1/1 からの秒数を求める
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(2000, 1, 1);
# 前日を表示
show_date($tm - 24 * 3600);
# 翌日を表示
show_date($tm + 24 * 3600);
2010 12 19 -> 1292684400 <> 前日:2010-12-18 <>翌日:2010-12-20
1000 2 28 -> -30605246339 <> 前日:1000-02-27 <>翌日:1000-03-01
2000 2 28 -> 951663600 <> 前日:2000-02-27 <>翌日:2000-02-29
2004 2 28 -> 1077894000 <> 前日:2004-02-27 <>翌日:2004-02-29

Dateモジュール

Dateモジュールを使う方法が紹介されているが、あいにく、Strawberry/perl 5, version 12, subversion 1ではエラーが出た。5.005_03 built for i386-freebsdのサーバー、v5.10.1 (*) built for i386-freebsd-64int のサーバーも同じくエラー。よって、本方法の説明は割愛する。

use Date::Simple;

time.cgi // Topに戻る // indexに戻る
Copyright(C) 2009-2021 Grandmaster Last up : 2020/09/18