2011-11-27 12 views
6

¿Cómo convierto mi regreso usando DateTime de:Perl - formato de salida DateTime

This is my date:2011-11-26T20:11:06 a This is my date:20111126

Utilizando este código existente:

use DateTime qw(); 
my $dt3 = DateTime->now->subtract(days => 1); 
print "This is my date:$dt3\n" 

Respuesta

5

Sólo añadir ->ymd("") en la segunda línea . El parámetro "" es el separador, que usted elige ser una cadena vacía.

use DateTime qw(); 
my $dt3 = DateTime->now->subtract(days => 1)->ymd(""); 
print "This is my date:$dt3\n" 
0

Hay alrededor de una docena de formas de procesar las fechas en Perl. Sin embargo, si se conoce el formato de la cadena de fecha, puede haber ninguna razón para llamar a un módulo de fecha y hora:

$dt3 =~ /^(\d+)-(\d+)-(\d+)/; 
print "This is my date:${1}${2}${3}\n"; 

No estoy familiarizado con DateTime, pero me sorprendería si no había una manera para formatear los datos cuando los muestra.

Personalmente prefiero Time::Piece y Time::Seconds para estas cosas. Estos módulos han sido parte de la instalación estándar de Perl desde 5.10. Además, creo que la interfaz es bastante simple y limpia.

use Time::Piece; 
use Time::Seconds; 

my $time = localtime; 
$time -= ONE_DAY; 

print "This is my date:" . $time->ymd(""); 

Por alguna razón, no se puede decir $time = localtime - ONE_DAY; en la misma línea. Supongo que debe crear el objeto Time::Piece antes de poder manipularlos con las constantes Time::Second.

10

ymd es el más simple:

print "This is my date: ", $dt3->ymd(''), "\n"; 

strftime es el propósito más general:

print "This is my date: ", $dt3->strftime('%Y%m%d'), "\n"; 

También son específicos (por ejemplo DateTime::Format::Atom) y general (por ejemplo DateTime::Format::Strptime) de formato herramientas de ayuda que puede utilizar:

use DateTime::Format::Strptime qw(); 
my $format = DateTime::Format::Strptime->new(pattern => '%Y%m%d'); 
print "This is my date: ", $format->format_datetime($dt3), "\n"; 

PS — Su código dará la fecha en o cerca de Inglaterra, no la fecha en la que se encuentra. Para ello, se quiere

my $dt3 = DateTime->now(time_zone => 'local'); 

o el más apropiado

my $dt3 = DateTime->today(time_zone => 'local');