perl datetime date rfc822

¿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";