Perl入門ゼミ

  1. Perl
  2. 標準関数
  3. here

localtime関数 - 現在の日付・時刻を取得する

localtime関数を使用すると、現在の日付と時刻を取得することができます。各地域にあわせたローカル時間を取得できます。

#    秒   分    時     日     月    年     曜日   年初か 夏時間を
#                                                 らの   適用して
#                                                 経過日 いるか
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime;

# 時刻文字列
my $localtime = localtime;

リストコンテキストで使用した場合は日付・時刻の要素情報、スカラコンテキストで使用した場合は、日付・時刻を表す文字列を取得できます。

協定世界時を取得したい場合は、gmtime関数を使用してください。

エポックからの経過時間だけを知るだけでよい場合はtime関数を使用してください。

より便利に日付・時刻を扱いたい場合はTime::Pieceもお勧めです。

日付・時刻に関する一般的な情報については、以下を参考にしてください。

ローカル時間と協定世界時

「太陽が一番高くなる時刻が正午(12:00)です」というふうに時刻を決めたとすると、各国では時刻が一致しないことになります。たとえば、日本が正午(12:00)のときは、地球の裏側は真夜中の12時です。

このような時刻をローカル時間といいます。OSの時計はローカル時間を表示するように設定されています。

また協定世界時という全世界で一致する時刻があります。この時刻は世界のどこから見ても同じです。

日本の場合はこの協定世界時から9時間進んだ自国をローカル時間としています。

localtime関数のサンプル

localtime関数を使ったサンプルです。

use strict;
use warnings;

print "(1)現在の日付と時刻(ローカル時間)を取得する。\n";

#    秒   分    時     日     月    年     曜日   年初か 夏時間を
#                                                 らの   適用して
#                                                 経過日 いるか
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime;

# localtime関数からは1900年から数えた年が返却される。
$year += 1900;

# 月は0から始まるので、表示するときは1を加える。
$mon++;

# 日曜日は0になります。
my @day_of_week = qw/日 月 火 水 木 金 土/;

print "現在は、$year年$mon月$mday日 $hour時$min分$sec秒です。";
print "曜日は" . $day_of_week[$wday] . "曜日です。\n\n";
print "1年で数えると$yday日が経過しました。\n\n";

if ($isdst) {
  print "現在夏時間が適用されいます。\n\n";
}
else {
  print "現在夏時間は適用されていません。\n\n";
}

print "(2)文字列として現在の日付(ローカル時間)を取得する。\n";
my $date_str = localtime;
print $date_str . "\n";

現在の日付と時刻(ローカル時間)を取得する

my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime;

現在の日付と時刻を取得するにはlocaltime関数を使用します。localtime関数は、日本人が時刻を取得したいと思ったときの順序と逆になっています。先頭から「秒分時日月年」の順です。

年は1900年からの経過年ですので、取得した$yearに1900を加える必要があります。

$year += 1900;

月は0から始まります。たとえば1月は0、2月は1のようになっていますので、1を加算する必要があります。

$mon++;

曜日は0から始まり0は日曜日です。月曜日は1、火曜日は2というふうになります。曜日を表示するには、配列の添え字と曜日を対応づけた配列を作っておきます。

my @day_of_week = qw/日 月 火 水 木 金 土/;

$ydayは、年の開始からの日数です。$isdstは夏時間(サマータイム)を適用しているかどうかです。

文字列として現在の日付(ローカル時間)を取得する

my $date_str = localtime;

時刻の文字列表現を取得するにはlocaltime関数の戻り値をスカラーコンテキストで評価します。

localtime関数のデフォルトの引数

localtime関数に引数を与えないとtime関数の値(エポックからの経過秒数)が使用されます。エポックからの秒数を引数を明示的に与えることもできます。