localtime

UNIX 秒をローカル時間に変換する

構文

解説

localtime は、リストコンテキスト (戻り値をリストで受け取る状況) の場合、 EXPR に与えらえれた UNIX 秒からローカルのタイムゾーンにおける日時を割り出し、 その結果を 9 つ値を持つリストとして返します。 引数 EXPR が省略されたら、現在日時を表す UNIX 秒 (time から得られる値) が適用されます。 返されるリストのそれぞれの値の意味は次の通りです。

# 意味
0 秒 (0 ~ 59)
1 分 (0 ~ 59)
2 時 (0 ~ 23)
3 日 (1 ~ 31)
4 月 (0 ~ 11, 1 月は 0, 12 月は 11)
5 西暦 1900 年からの経過年数
6 曜日 (0 ~ 6, 日曜日は 0, 土曜日は 6)
7 1 月 1 日からの経過日数 (該当日が 1 月 1 日 なら 0, 1 月 2 日なら 1)
8 夏時間 (Daylight Saving Time) なら 1, そうでなければ 0
use utf8;
binmode STDOUT, ":utf8";

my @tm = localtime(time);

# 今日の日付
my $year       = $tm[5] + 1900;                           # 西暦
my $mon        = $tm[4] + 1;                              # 月
my $mday       = $tm[3];                                  # 日
my $wday       = $tm[6];
my @youbi_list = ( '日', '月', '火', '水', '木', '金', '土' );
my $youbi      = $youbi_list[$wday];                      # 曜日
print "今日は ${year}年${mon}月${mday}日 (${youbi}) です。\n";

# 今の時刻
my $hour = $tm[2];
my $min  = $tm[1];
my $sec  = $tm[0];
print "今は ${hour}時${min}分${sec}秒です。\n";

# 1 月 1 日からの経過日数
my $yday = $tm[7];
print "今日は 1 月 1 日から数えて ${yday} 日目です。\n";

# 夏時間かどうか
my $isdst = $tm[8];
if ($isdst) {
    print "今日は夏時間です。\n";
}
else {
    print "今日は夏時間ではありません。\n";
}

上記コードは次のような結果を出力します。

今日は 2023年5月16日 (火) です。
今は 15時16分57秒です。
今日は 1 月 1 日から数えて 135 日目です。
今日は夏時間ではありません。

月は 1 ~ 12 ではなく 0 ~ 11 が返ってくる点に注意してください。

西暦に該当する値は西暦 1900 年からの経過年数です。従って、現在の西暦を求める際には、得られた値に 1900 を加算してください。

曜日に該当する値は 0 ~ 6 の整数ですが、0 は日曜日を表し、6 は土曜日を表します。

1 月 1 日からの経過日数は、通常は 0 ~ 364 の整数になりますが、うるう年の場合は最大で 365 になります。

localtime は、スカラーコンテキスト (戻り値をスカラー変数で受け取る状況) の場合、 英語表記の現在日時文字列を返します。

my $now = localtime(time);
print $now;    # Tue May 16 15:28:00 2023

もしローカル時間ではなく GMT を扱いたいなら、localtime の代わりに gmtime を使ってください。