2011-11-27 13 views
6

Come faccio a convertire il mio ritorno con DateTime da:perl - formattazione dell'output DateTime

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

Utilizzando questo codice esistente:

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

risposta

5

Basta aggiungere ->ymd("") sulla seconda riga . Il parametro "" è il separatore, che hai scelto di essere una stringa vuota.

0

Esistono una dozzina di modi per elaborare le date in Perl. Tuttavia, se si conosce il formato della stringa data, là forse c'è motivo di chiamare un modulo datetime:

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

io non sono a conoscenza DateTime, ma sarei sorpreso se non ci fosse un modo per formattare i dati quando li si visualizza.

Personalmente preferisco Time::Piece e Time::Seconds per queste cose. Questi moduli fanno parte dell'installazione standard di Perl dal 5.10. Inoltre, trovo l'interfaccia abbastanza semplice e pulita.

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

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

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

Per qualche ragione, non si può dire che $time = localtime - ONE_DAY; sulla stessa linea. Immagino sia necessario creare l'oggetto Time::Piece prima di poterli manipolare con le costanti Time::Second.

10

ymd è il più semplice:

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

strftime è obiettivo più generale:

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

Ci sono anche specifici (ad esempio DateTime::Format::Atom) e generale (ad esempio DateTime::Format::Strptime) formattazione strumenti di supporto è possibile utilizzare:

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 — Il tuo codice fornirà la data in o vicino all'Inghilterra, non la data in cui ti trovi. Per questo, si desidera

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

o il più appropriato

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