明日や昨日の日付を計算する(time関数) - Perl

明日、また昨日の日付を計算したい。
timeの戻り値が分かっている場合は非常にシンプルに求めることが出来る。

サンプル

;#
;#昨日と明日を求める
;#

#-- 現在の時刻を取得 --#
$time = time();

#-- 明日 --#
print nextDay($time), "\n";

#-- 昨日 --#
print prevDay($time), "\n";

#-------------------------------
#明日
#-------------------------------
sub nextDay{
  my $time = shift || time();
  my $nextDay = $time + (24 * 60 * 60);
  my ($yyyy, $mm, $dd) = (localtime($nextDay))[5,4,3];

  $yyyy += 1900;
  $mm += 1;

  return(
    sprintf('%4d/%02d/%02d', $yyyy, $mm, $dd)
  );
}


#-------------------------------
#昨日
#-------------------------------
sub prevDay{
  my $time = shift || time();
  my $prevDay = $time - (24 * 60 * 60);
  my ($yyyy, $mm, $dd) = (localtime($prevDay))[5,4,3];

  $yyyy += 1900;
  $mm += 1;

  return(
    sprintf('%4d/%02d/%02d', $yyyy, $mm, $dd)
  );
}

実行結果

2006/10/12
2006/10/10

timeの戻り値とは、決められたある日時からの経過秒数をカウントした物である。MacOS以外は1970年1月1日からカウントが開始されている。普段コードを書く際には特に意識する必要はないが、秒数で管理されているというポイントだけ押さえておくと、上記のような処理を書く際に役立つ。

Returns the number of non-leap seconds since whatever time the system considers to be the epoch (that's 00:00:00, January 1, 1904 for Mac OS, and 00:00:00 UTC, January 1, 1970 for most other systems). Suitable for feeding to "gmtime" and "localtime".