Perl-日付と時刻
この章では、Perlで日付と時刻を処理および操作する方法の基本的な理解を提供します。
現在の日時
から始めましょう localtime()関数。引数が指定されていない場合、現在の日付と時刻の値を返します。以下は、によって返される9要素のリストです。localtime リストコンテキストで使用しながら機能する-
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()関数を使用して、エポック時間を取得できます。つまり、Unixで特定の日付から経過した秒数は1970年1月1日です。
#!/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()次の表を使用して、日付と時刻をフォーマットします。アスタリスク(*)でマークされた指定子は、ロケールに依存することに注意してください。
指定子 | と取り換える | 例 |
---|---|---|
%a |
平日の略称* | Thu |
%A |
完全な平日の名前* | Thursday |
%b |
月の略称* | Aug |
%B |
完全な月の名前* | 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-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 |
10進数としての月(01-12 ) |
08 |
%M |
分(00-59 ) |
55 |
%n |
改行文字('\n' ) |
|
%p |
AMまたはPMの指定 | PM |
%r |
12時間制* | 02:55:02 pm |
%R |
24時間HH:MM 制、同等%H:%M |
14:55 |
%S |
2番目(00-61 ) |
02 |
%t |
水平タブ文字('\t' ) |
|
%T |
ISO 8601時間形式(HH:MM:SS )、同等%H:%M:%S |
14:55 |
%u |
平日はISO8601で、月曜日は1 (1-7 ) |
4 |
%U |
第1週の最初の日を第1日曜日とする週番号(00-53 ) |
33 |
%V |
ISO 8601週番号(00-53 ) |
34 |
%w |
平日を10進数として、日曜日を0 (0-6 )として |
4 |
%W |
最初の月曜日を第1週の最初の日とする週番号(00-53 ) |
34 |
%x |
日付表現* | 08/23/01 |
%X |
時間表現* | 14:55:02 |
%y |
年、下2桁(00-99 ) |
01 |
%Y |
年 | 2001 |
%z |
タイムゾーンでのUTCからのISO8601オフセット(1分= 1、1時間= 100) タイムゾーンを終了できない場合、文字はありません |
+100 |
%Z |
タイムゾーン名または略語* タイムゾーンを終了できない場合、文字はありません |
CDT |
%% |
% 看板 |
% |
次の例をチェックして、使用法を理解しましょう-
#!/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