Perl 日時

この章では、Perl 言語での日時の処理について紹介します。

Perl で時間を処理する関数には、以下のものがあります:

  • 1. time() 関数:1970年1月1日からの累計秒数を返します
  • 2. localtime() 関数:ローカルタイムゾーンの時刻を取得します
  • 3. gmtime() 関数:グリニッジ標準時を取得します

現在の日時

次に見てみましょうlocaltime()この関数は、引数なしの場合に現在の日時を返します。

以下の 9 つの記号は、それぞれ異なる日時パラメータを表します:

sec,     # 秒, 0 到 61
min,     # 分钟, 0 到 59
hour,    # 小时, 0 到 24
mday,    # 天, 1 到 31
mon,     # 月, 0 到 11
year,    # 年,从 1900 开始
wday,    # 星期几,0-6,0表示周日
yday,    # 一年中的第几天,0-364,365
isdst    # 如果夏令时有效,则为真

実例は次のとおりです:

実例

#!/usr/bin/perl @months = qw(1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月); @days = qw(日曜日 月曜日 火曜日 水曜日 木曜日 金曜日 土曜日); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(); print "$mday $months[$mon] $days[$wday]\n";

上記の実例を実行した出力結果は次のとおりです:

12 六月 星期天

localtime() を直接呼び出すと、システムで現在設定されているタイムゾーンの時刻を返します。実例は以下のとおりです:

実例

#!/usr/bin/perl $datestring = localtime(); print "日時は:$datestring\n";

上記の実例を実行した出力結果は次のとおりです:

时间日期为:Sun Jun 12 11:27:31 2016

グリニッジ標準時 (GMT)

関数gmtime()localtime() と似ていますが、グリニッジ標準時を返します。

実例

#!/usr/bin/perl $local_datestring = localtime(); print "ローカルの日時は:$local_datestring\n"; $gmt_datestring = gmtime(); print "GMT の日時は:$gmt_datestring\n";

上記の実例を実行した出力結果は次のとおりです:

本地时间日期为:Sun Jun 12 11:32:14 2016
GMT 时间日期为:Sun Jun 12 03:32:14 2016

この実例からわかるように、中国の時間とグリニッジ標準時は8時間の差があります。


日付と時刻のフォーマット

localtime() 関数の 9 つの時間要素を使用して、必要な形式の時刻を出力できます。フォーマット出力には printf() 関数を使用します:

実例

#!/usr/bin/perl ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(); printf("フォーマット時刻:HH:MM:SS\n"); printf("%02d:%02d:%02d", $hour, $min, $sec);

上記の実例を実行した出力結果は次のとおりです:

格式化时间:HH:MM:SS
11:35:23

エポックタイム (Epoch Time)

time() 関数を使用してエポックタイムを取得できます。この関数は 1970年1月1日からの累計秒数を返します。実例は以下のとおりです:

実例

#!/usr/bin/perl $epoc = time(); print "1970年1月1日からの累計秒数は:$epoc\n";

上記の実例を実行した出力結果は次のとおりです:

从1970年1月1日起累计的秒数为:1465702883

希望する時刻形式を出力できます:

実例

#!/usr/bin/perl ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(); print "現在の日時:"; printf("%d-%d-%d %d:%d:%d",$year+1900,$mon+1,$mday,$hour,$min,$sec); print "\n"; $epoc = time(); $epoc = $epoc - 24 * 60 * 60; # 1日前の時刻の秒数 ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($epoc); print "昨日の日時:"; printf("%d-%d-%d %d:%d:%d",$year+1900,$mon+1,$mday,$hour,$min,$sec); print "\n";

上記の実例を実行した出力結果は次のとおりです:

当期时间和日期:2017-3-15 12:47:54
昨天时间和日期:2017-3-14 12:47:54

POSIX 関数 strftime()

strftime() 関数は、時刻を希望する形式にフォーマットできます。

以下の表に、フォーマットに使用するいくつかの記号を示します。* はローカルタイムに依存することを表します:

記号 説明 実例
%a 曜日の短縮名( Sun..Sat) * Thu
%A 曜日の完全名( Sunday..Saturday) * Thursday
%b 月の短縮名(Jan..Dec) * Aug
%B 月の完全名(January..December) * August
%c 日付と時刻 * Thu Aug 23 14:55:02 2001
%C 年を100で割り、整数部分を取ります (00-99) 20
%d 月の何日目か (01-31) 23
%D 日付,MM/DD/YYに等しい%m/%d/%y 08/23/01
%e 月の何日目か。1桁の場合はスペースで埋めます ( 1-31) 23
%F YYYY-MM-DDの短縮形は に似ています%Y-%m-%d 2001-08-23
%g 年の下2桁 (00-99) 01
%g 年 2001
%h 月の短縮名 * (%bオプションと同じ) Aug
%H24時間制 (00-23) 14
%I 12時間制 (01-12) 02
%j 年の何日目か (001-366) 235
%m 月 (01-12) 08
%M 分 (00-59) 55
%n 改行 ('\n')
%pAM または PM を表示 PM
%r 時刻(hh:mm:ss AM または PM)、12時間 * 02:55:02 pm
%R 24時間HH:MM時刻形式。に等しい%H:%M 14:55
%S 秒 (00-61) 02
%t 水平タブ ('\t')
%T 時刻(24時間制)(hh:mm:ss)。に等しい%H:%M:%S 14:55
%u ISO 8601 の曜日形式。月曜日が1 (1-7) 4
%U 年の第何週目か。日曜日を週の初めとします (00-53) 33
%V ISO 8601 の第何週目か (00-53) 34
%w 週の何日目か(0は日曜日を表す) (0-6) 4
%W 年の第何週目か。月曜日を週の初めとします (00-53) 34
%x 日付の表示形式(mm/dd/yy) * 08/23/01
%X 時刻の表示形式 * 14:55:02
%y 年、2桁 (00-99) 01
%Y 年 2001
%z ISO 8601 と UTC のタイムゾーンオフセット (1 minute=1, 1 hour=100)

+100
%Z 現在のタイムゾーンの名前。例:"中国標準時" *

CDT
%% %記号 %

実例

#!/usr/bin/perl use POSIX qw(strftime); $datestring = strftime "%Y-%m-%d %H:%M:%S", localtime; printf("日時 -$datestring\n"); # GMT のフォーマット済み日時 $datestring = strftime "%Y-%m-%d %H:%M:%S", gmtime; printf("日時 -$datestring\n");

上記の実例を実行した出力結果は次のとおりです:

时间日期 - 2016-06-12 12:15:13
时间日期 - 2016-06-12 04:15:13
その他の拡張