2010-10-06 22 views

risposta

29

più efficace per voi o il computer?

Per voi:

use POSIX qw/strftime/; 

print strftime("%Y-%m-%d", localtime), "\n"; 

per il computer:

my @t = localtime; 
$t[5] += 1900; 
$t[4]++; 

printf "%04d-%02d-%02d", @t[5,4,3]; 
10

Ci sono molti moduli nello spazio dei nomi Date::, molti dei quali possono aiutarti a fare ciò che ti serve. In alternativa, si può semplicemente rotolare il proprio:

my ($day, $mon, $year) = (localtime)[3..5]; 
printf "%04d-%02d-%02d\n", 1900+$year, 1+$mon, $day; 

Risorse

+0

Non dimenticare "DateTime'! – CanSpice

6

È possibile utilizzare il modulo Time::Piece (in bundle con il Perl 5.10 e fino, oppure si può scaricare da CPAN), come segue:

14

Oppure è possibile utilizzare il modulo DateTime che sembra essere il modulo di gestione della data standard di fatto e giorni È necessario installarlo da CPAN.

use DateTime; 
my $now = DateTime->now->ymd; 
+0

la standardizzazione su DateTime rende sicuramente le cose più semplici per questo programmatore, e in modo coerente utilizzando un modulo abbastanza completo per tutto sembra una buona idea in un'area con molti trucchi e incongruenze come calcoli di data e ora – plusplus

+4

Usa 'DateTime-> now-> iso8601' se vuoi anche il tempo incluso. – Flimm

5

Questo non crea alcun variabili temporanee:

printf "%d-%02d-%02d", map { $$_[5]+1900, $$_[4]+1, $$_[3] } [localtime]; 
+1

Huh, non avevo mai considerato quell'uso per la mappa prima. Non so se mi piace, ma è certamente intelligente. –

+2

Questo tipo di codice è il motivo per cui io amo e odio simultaneamente Perl –

Problemi correlati