Perlゼミ

n日後の日付を求める

n日後の日付を求めるには、n日を秒に変換してtime関数で取得した現在の時刻(エポックからの秒数秒)に加算します。加算した秒をlocaltime関数を使って、日付と時刻の表記に変換します。

use strict;
use warnings;
use Time::Local 'timelocal';

print "(1)n日後の日付を求める\n";

# 2日後
my $n = 2;

# 日付を秒に直して加える。
my $sec_from_epoch = time + (60 * 60 * 24 * $n);

# 秒を日付と時刻に変換
my ($sec, $min, $hour, $mday, $month, $year)
  = localtime( $sec_from_epoch );

$month++;
$year += 1900;

print "$n日後は、$year年$month月$mday日$hour時$min分$sec秒です。\n";

実行結果

(1)n日後の日付を求める
2日後は、2008年10月24日23時2分43秒です。

解説

日付を秒に直して加算

時刻を扱うときは秒に変換してから扱います。time関数でエポックからの秒数を取得できるので、それに n日後の秒数を加算します。

# 2日後
my $n = 2;

# 日付を秒に直して加える。
my $sec_from_epoch = time + (60 * 60 * 24 * $n); 

特定の日付から2日後を取得したい場合は、まずTime::Localモジュールのtimelocal関数を使って、特定の日付のエポックからの秒数を求めます。

その後は上の手順と同じです。

use Time::Local 'timelocal';

# 2000年3月31日
my $year = 2000 - 1900;
my $mon = 3 -1;
my $mday = 31;
my $sec_from_epoch = timelocal(0, 0, 0, $mday, $mon, $year);

秒を日付と時刻に変換する

localtime関数を使って秒を日付と時刻に変換します。

# 秒を日付と時刻に変換
my ($sec, $min, $hour, $mday, $month, $year)
  = localtime( $sec_from_epoch );

$month++;
$year += 1900;

Perl逆引き辞典/日付と時刻へ

Perlの書籍
  • 業務に役立つPerl

    ログ解析など日本語を含むテキスト処理の実践!
    この私、Perlゼミの作者が執筆しています。
    ご購入、口コミ歓迎。
  • Perlの書籍 »
自己紹介
木本裕紀

「今日も元気だ、Perlで元気。
ゆとりあるITエンジニアライフのために
Perl情報を前向きに発信中!」

Twitter
フォロー、いいね、リツート、コメント歓迎

Youtube

チャンネル登録、いいね、コメント歓迎

kimoto.yuki@gmail.com
応援メッセージ、質問、間違い報告歓迎

木本システム株式会社
ご紹介キャンペーン実施中です。契約金額の10%をご紹介料としてお支払い。

(例)30万円のシステム開発委託契約が、1年続いたら、36万円がもらえる!!!