Perl の日付と時刻


この章では、Perl 言語が時刻と日付をどのように処理するかを紹介します。

Perl で時間を処理する関数は次のとおりです:

  • 1. time() 関数: 1970 年 1 月 1 日からの累積秒数を返します

  • 2.ローカルタイムゾーンの時刻を取得します

  • 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( 一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月 );
@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


新しいエポック時間 (エポック時間)

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+1990,$mon+1,$mday,$hour,$min,$sec);

print "\n";

$epoc = time();
$epoc = $epoc - 24 * 60 * 60;   # 一天前的时间秒数
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($epoc);
print "昨天时间和日期:";
printf("%d-%d-%d %d:%d:%d",$year+1990,$mon+1,$mday,$hour,$min,$sec);

print "\n";

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

当期时间和日期:2106-6-12 11:49:28
昨天时间和日期:2106-6-11 11:49:28


POSIX 関数 strftime()

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

次の表には、いくつかの書式設定記号がリストされています。* 記号は、現地時間に依存することを示します。曜日の略語 (Sun..Sat) *Thu%A🎜🎜 曜日の完全な名前 (日曜日..土曜日) *🎜🎜木曜日🎜🎜🎜🎜%b< /code>🎜🎜月 略称 (1月..12月) *🎜🎜8月🎜🎜🎜🎜%B🎜🎜月の完全名 (1月..12月) * 🎜🎜8月🎜🎜🎜🎜%c🎜🎜日付と時刻*🎜🎜Thu Aug 23 14:55:02 2001🎜🎜🎜 🎜%C< /code>🎜🎜年を 100 で割って四捨五入します (00-99)🎜🎜20🎜🎜🎜🎜% d🎜🎜 月の日 (01-31)🎜🎜23🎜🎜🎜🎜%D🎜🎜日付、MM/DD/YY%m/%d/%y🎜🎜08/23/01🎜🎜🎜🎜< と同等です。 code>%e🎜🎜 月の日、スペースを使用して 1 桁の数字を入力してください ( 1-31)🎜🎜23🎜🎜🎜🎜< code>%F🎜🎜 YYYY-MM-DD の略語は %Y-%m-%d に似ています🎜🎜2001- 08-23🎜🎜 🎜🎜%g🎜🎜 西暦の下 2 桁 (00-99)🎜🎜01🎜🎜🎜🎜%g 🎜🎜年🎜🎜2001🎜🎜🎜🎜%h月の略語* (と同じ) %b オプション) 🎜🎜8 月🎜🎜🎜🎜%H🎜🎜24 時間形式 (00-23)🎜 🎜14 🎜🎜🎜🎜%I🎜🎜12 時間制 (01-12)🎜🎜02 🎜🎜🎜🎜%j< /code>🎜🎜 年間通算日 (001-366)🎜🎜235🎜🎜🎜🎜%m 🎜🎜月 ( 01-12)🎜🎜08🎜🎜🎜🎜%M🎜🎜分 (00 -59)🎜 🎜55🎜🎜🎜🎜%n🎜🎜改行 ('n')🎜🎜 🎜🎜🎜 🎜%p🎜🎜午前または午後を表示します🎜🎜午後🎜🎜🎜🎜%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 に等しい🎜🎜< code> 14:55🎜🎜🎜🎜%u🎜🎜ISO 8601 曜日形式、月曜日は 1 (1-7< /code) >)🎜🎜4🎜🎜 年の週数、日曜日が最初の日 (00-53)33
シンボル説明インスタンス
%a%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/%y08/23/01
%e一个月的第几天,使用空格填充个位数 ( 1-31)23
%FYYYY-MM-DD 的简写类似于 %Y-%m-%d2001-08-23
%g年份的最后两位数 (00-99)01
%g2001
%h月的简称 * (和%b选项相同)Aug
%H24 小时制 (00-23)14
%I12 小时制 (01-12)02
%j一年的第几天 (001-366)235
%m月 (01-12)08
%M分钟 (00-59)55
%n新行 ('n')
%p显示出AM或PMPM
%r 02:55:02 pm
%R24 小时 HH:MM 时间格式,相等于 %H:%M14:55
%S秒数 (00-61)02
%t水平制表符 ('t')
%T时间(24小时制)(hh:mm:ss),相等于%H:%M:%S14:55
%uISO 8601 的星期几格式,星期一为1 (1-7)4
%U%U一年中的第几周,星期天为第一天(00-53)33
%VISO 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年,两位数 (00-99)01
%Y2001
%zISO 8601与UTC的时区偏移(1 minute=1, 1 hour=100)


+100
%Z当前时区的名称,如"中国标准时间" *


CDT
%%% 符号%

%V

ISO 8601 週 (00-53)🎜🎜34🎜🎜🎜🎜%w< /code >🎜🎜曜日 (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分=1、1 時間=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
🎜