2008-10-05 5 views

Antwort

31
use POSIX qw(strftime); 
print strftime("%a, %d %b %Y %H:%M:%S %z", localtime(time())) . "\n"; 
+0

Oh, schön, ich wusste nicht, dass es etwas im Kern gibt, das das tun würde. –

+0

Danke, das ist genau das, was ich gesucht habe, als ich nach einer eleganten Art gefragt habe :) –

+0

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

14

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'}, ...) 
4

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"; 
+0

Diese Antwort ist besser als die höchste. Der Aufruf von 'time()' in 'localtime()' ist jedoch nicht notwendig (es ist das Standardargument). – neuhaus