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 |
%H | 24時間制 (00-23) |
14 |
%I |
12時間制 (01-12) |
02 |
%j |
年の何日目か (001-366) |
235 |
%m |
月 (01-12) |
08 |
%M |
分 (00-59) |
55 |
%n |
改行 ('\n') |
|
%p | AM または 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その他の拡張