Wie kann ich das Datum im Perlformat RFC822 elegant drucken?Wie drucke ich elegant das Datum im RFC822-Format in Perl?
Antwort
use POSIX qw(strftime);
print strftime("%a, %d %b %Y %H:%M:%S %z", localtime(time())) . "\n";
Oh, schön, ich wusste nicht, dass es etwas im Kern gibt, das das tun würde. –
Danke, das ist genau das, was ich gesucht habe, als ich nach einer eleganten Art gefragt habe :) –
Umm, ich glaube nicht, dass das mehr funktioniert. Mit ActivePerl 5.16 wird diese 'strftime ('% a,% d% b% Y% H:% M:% S% z', lokale Zeit (Zeit()))' '' Thu, 14 Nov 2013 09:46:00 E. Australia Standard Time "ist definitiv falsch. Bitte beachten Sie RFC 2822 3.3. Datums- und Zeitangabe – AlwaysLearning
Die Datetime Suite bietet Ihnen eine Reihe von verschiedenen Möglichkeiten, wie zB:
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());
Update: Zeit für eine bestimmte Zeitzone zu geben, fügen Sie ein time_zone Argument bis jetzt():
DateTime->now(time_zone => $ENV{'TZ'}, ...)
Es kann mit strftime
durchgeführt werden, aber seine %a
(Tag) und %b
(Monat) sind in der Sprache des aktuellen ausgedrückt Gebietsschema.
Von man strftime
:
% a Der abgekürzte Name des Wochentags entsprechend der aktuellen locale.
% b Der abgekürzte Name des Monats gemäß dem aktuellen Gebietsschema.
Das Feld Datum in Mail Muss Verwendung nur diese Namen (von rfc2822 DATE AND TIME SPECIFICATION): tag
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";
Diese Antwort ist besser als die höchste. Der Aufruf von 'time()' in 'localtime()' ist jedoch nicht notwendig (es ist das Standardargument). – neuhaus
Added RFC 822:
Deshalb portablen Code der
C
locale wechseln sollte –