Perlで日付をRFC822形式でエレガントに出力するにはどうすればよいですか?
11062 次
4 に答える
30
use POSIX qw(strftime);
print strftime("%a, %d %b %Y %H:%M:%S %z", localtime(time())) . "\n";
于 2008-10-05T15:12:41.027 に答える
15
DateTimeスイートには、次のようなさまざまな方法があります。
use DateTime;
print DateTime->now()->strftime("%a, %d %b %Y %H:%M:%S %z");
use DateTime::Format::Mail;
print DateTime::Format::Mail->format_datetime( DateTime->now() );
print DateTime->now( formatter => DateTime::Format::Mail->new() );
更新:特定のタイムゾーンの時間を指定するには、now()にtime_zone引数を追加します。
DateTime->now( time_zone => $ENV{'TZ'}, ... )
于 2008-10-05T17:40:51.853 に答える
5
で実行できますstrftime
が、その%a
(日) と%b
(月) は現在のロケールの言語で表されます。
からman strftime
:
%a 現在のロケールに従った省略された曜日名。
%b 現在のロケールに従った省略された月の名前。
メールの Date フィールドでは、次の名前のみを使用する必要があります ( rfc2822 DATE AND TIME SPECIFICATIONより):
day = "Mon" / "Tue" / "Wed" / "Thu" / "Fri" / "Sat" / "Sun"
month = "Jan" / "Feb" / "Mar" / "Apr" / "May" / "Jun" /
"Jul" / "Aug" / "Sep" / "Oct" / "Nov" / "Dec"
C
したがって、移植可能なコードはロケールに切り替える必要があります。
use POSIX qw(strftime locale_h);
my $old_locale = setlocale(LC_TIME, "C");
my $date_rfc822 = strftime("%a, %d %b %Y %H:%M:%S %z", localtime(time()));
setlocale(LC_TIME, $old_locale);
print "$date_rfc822\n";
于 2016-10-20T08:40:42.300 に答える