¿Cómo imprimo elegantemente la fecha en formato RFC822 en Perl?
datetime date (3)
El conjunto de programas DateTime le ofrece varias formas diferentes, por ejemplo:
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() );
Actualización: para dar tiempo a alguna zona horaria particular, agregue un argumento time_zone a now ():
DateTime->now( time_zone => $ENV{''TZ''}, ... )
¿Cómo puedo imprimir elegantemente la fecha en formato RFC822 en Perl?
use POSIX qw(strftime);
print strftime("%a, %d %b %Y %H:%M:%S %z", localtime(time())) . "/n";
Se puede hacer con strftime
, pero su %a
(día) y %b
(mes) se expresan en el idioma de la configuración regional actual.
Del man strftime
:
% a El nombre abreviado de la semana de acuerdo con la configuración regional actual.
% b El nombre abreviado del mes de acuerdo con la configuración regional actual.
El campo de fecha en el correo debe usar solo estos nombres (desde rfc2822 FECHA DE LA FECHA Y LA HORA ):
day = "Mon" / "Tue" / "Wed" / "Thu" / "Fri" / "Sat" / "Sun"
month = "Jan" / "Feb" / "Mar" / "Apr" / "May" / "Jun" /
"Jul" / "Aug" / "Sep" / "Oct" / "Nov" / "Dec"
Por lo tanto, el código portátil debería cambiar a la configuración regional 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";