Perl-date-time
Perl-日付と時刻
この章では、Perlで日付と時刻を処理および操作する方法に関する基本的な理解を提供します。
現在の日付と時刻
引数を指定しない場合、現在の日付と時刻の値を返す* localtime()関数から始めましょう。 以下は、リストコンテキストで使用中に *localtime 関数によって返される9要素のリストです-
sec, # seconds of minutes from 0 to 61
min, # minutes of hour from 0 to 59
hour, # hours of day from 0 to 24
mday, # day of month from 1 to 31
mon, # month of year from 0 to 11
year, # year since 1900
wday, # days since sunday
yday, # days since January 1st
isdst # hours of daylight savings time
localtime()関数によって返されるさまざまな要素を印刷するには、次の例を試してください-
#!/usr/local/bin/perl
@months = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
@days = qw(Sun Mon Tue Wed Thu Fri Sat Sun);
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
print "$mday $months[$mon] $days[$wday]\n";
上記のコードが実行されると、次の結果が生成されます-
16 Feb Sat
localtime()関数をスカラーコンテキストで使用する場合、システムに設定されている現在のタイムゾーンの日付と時刻が返されます。 現在の日付と時刻を完全な形式で印刷するには、次の例を試してください-
#!/usr/local/bin/perl
$datestring = localtime();
print "Local date and time $datestring\n";
上記のコードが実行されると、次の結果が生成されます-
Local date and time Sat Feb 16 06:50:45 2013
GMT時間
関数* gmtime()*はlocaltime()関数と同様に機能しますが、返される値は標準のグリニッジ標準時ゾーンにローカライズされます。 リストコンテキストで呼び出された場合、gmtimeによって返される最後の値である$ isdstは常に0です。 GMTには夏時間はありません。
localtime()はスクリプトを実行するマシンの現在の現地時間を返し、gmtime()はグリニッジ標準時(GMT)(またはUTC)を返すことに注意してください。
現在の日付と時刻をGMTスケールで印刷するには、次の例を試してください-
#!/usr/local/bin/perl
$datestring = gmtime();
print "GMT date and time $datestring\n";
上記のコードが実行されると、次の結果が生成されます-
GMT date and time Sat Feb 16 13:50:45 2013
日付と時刻のフォーマット
localtime()関数を使用して9要素のリストを取得し、後で* printf()*関数を使用して、次のように要件に基づいて日付と時刻をフォーマットできます-
#!/usr/local/bin/perl
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
printf("Time Format - HH:MM:SS\n");
printf("%02d:%02d:%02d", $hour, $min, $sec);
上記のコードが実行されると、次の結果が生成されます-
Time Format - HH:MM:SS
06:58:52
エポックタイム
time()関数を使用してエポック時間を取得できます。つまり、1970年1月1日のUnixでは、特定の日付から経過した秒数です。
#!/usr/local/bin/perl
$epoc = time();
print "Number of seconds since Jan 1, 1970 - $epoc\n";
上記のコードが実行されると、次の結果が生成されます-
Number of seconds since Jan 1, 1970 - 1361022130
次のように、指定された秒数を日付と時刻の文字列に変換できます-
#!/usr/local/bin/perl
$datestring = localtime();
print "Current date and time $datestring\n";
$epoc = time();
$epoc = $epoc - 24 *60* 60; # one day before of current date.
$datestring = localtime($epoc);
print "Yesterday's date and time $datestring\n";
上記のコードが実行されると、次の結果が生成されます-
Current date and time Tue Jun 5 05:54:43 2018
Yesterday's date and time Mon Jun 4 05:54:43 2018
POSIX関数strftime()
POSIX関数* strftime()を使用して、次の表を使用して日付と時刻をフォーマットできます。 アスタリスク()でマークされた指定子はロケールに依存することに注意してください。
Specifier | Replaced by | Example |
---|---|---|
%a
|
Abbreviated weekday name * | Thu
|
%A
|
Full weekday name* | Thursday
|
%b
|
Abbreviated month name * | Aug
|
%B
|
Full month name* | August
|
%c
|
Date and time representation * | Thu Aug 23 14:55:02 2001
|
%C
|
Year divided by 100 and truncated to integer (00-99 )
|
20
|
%d
|
Day of the month, zero-padded (01-31 )
|
23
|
%D
|
Short MM/DD/YY date, equivalent to %m/%d/%y
|
08/23/01
|
%e
|
Day of the month, space-padded (+ 1-31+ )
|
23
|
%F
|
Short YYYY-MM-DD date, equivalent to %Y-%m-%d
|
2001-08-23
|
%g
|
Week-based year, last two digits (00-99 )
|
01
|
%G
|
Week-based year | 2001
|
%h
|
Abbreviated month name* (same as %b )
|
Aug
|
%H
|
Hour in 24h format (00-23 )
|
14
|
%I
|
Hour in 12h format (01-12 )
|
02
|
%j
|
Day of the year (001-366 )
|
235
|
%m
|
Month as a decimal number (01-12 )
|
08
|
%M
|
Minute (00-59 )
|
55
|
%n
|
New-line character ('\n' )
|
|
%p
|
AM or PM designation | PM
|
%r
|
12-hour clock time * | 02:55:02 pm
|
%R
|
24-hour HH:MM time, equivalent to %H:%M
|
14:55
|
%S
|
Second (00-61 )
|
02
|
%t
|
Horizontal-tab character ('\t' )
|
|
%T
|
ISO 8601 time format (HH:MM:SS ), equivalent to %H:%M:%S
|
14:55
|
%u
|
ISO 8601 weekday as number with Monday as 1 (1-7 )
|
4
|
%U
|
Week number with the first Sunday as the first day of week one (00-53 )
|
33
|
%V
|
ISO 8601 week number (00-53 )
|
34
|
%w
|
Weekday as a decimal number with Sunday as 0 (0-6 )
|
4
|
%W
|
Week number with the first Monday as the first day of week one (00-53 )
|
34
|
%x
|
Date representation* | 08/23/01
|
%X
|
Time representation * | 14:55:02
|
%y
|
Year, last two digits (00-99 )
|
01
|
%Y
|
Year | 2001
|
%z
|
ISO 8601 offset from UTC in timezone (1 minute = 1, 1 hour = 100) タイムゾーンを終了できない場合、文字はありません |
+100
|
%Z
|
Timezone name or abbreviation* タイムゾーンを終了できない場合、文字はありません |
CDT
|
%%
|
A % sign
|
%
|
使用法を理解するために、次の例をチェックしましょう-
#!/usr/local/bin/perl
use POSIX qw(strftime);
$datestring = strftime "%a %b %e %H:%M:%S %Y", localtime;
printf("date and time - $datestring\n");
# or for GMT formatted appropriately for your locale:
$datestring = strftime "%a %b %e %H:%M:%S %Y", gmtime;
printf("date and time - $datestring\n");
上記のコードが実行されると、次の結果が生成されます-
date and time - Sat Feb 16 07:10:23 2013
date and time - Sat Feb 16 14:10:23 2013