Pregunta perl - formato de salida de DateTime


¿Cómo convierto mi devolución utilizando DateTime desde:

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

Usando este código existente:

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

6
2017-11-27 20:15


origen


Respuestas:


ymd es el más simple:

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

strftime es un propósito más general:

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

También hay específicos (p. DateTime :: Formato :: Atom) y general (p. DateTime :: Formato :: Strptime) formateando herramientas de ayuda que puede usar:

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

PD: su código indicará la fecha en Inglaterra o cerca de ella, no la fecha en la que se encuentra. Para eso, quieres

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

o el más apropiado

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

10
2017-11-28 08:14



Solo agrega ->ymd("") en la segunda línea El parámetro "" es el separador, que eliges para ser una cadena vacía.

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

5
2017-11-27 20:28



Hay alrededor de una docena de maneras de procesar las fechas en Perl. Sin embargo, si conoce el formato de la cadena de fecha, tal vez no haya 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 que no hubiera forma de formatear los datos cuando los muestre.

Yo personalmente prefiero Reloj y Tiempo :: Segundos 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 puedes decir $time = localtime - ONE_DAY; en la misma linea Supongo que necesitas crear el Time::Piece objeto primero antes de que pueda manipularlos con el Time::Second constantes.


0
2017-11-28 01:22