2010-10-06 5 views

Répondre

29

le plus efficace pour vous ou l'ordinateur?

Pour vous:

use POSIX qw/strftime/; 

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

Pour l'ordinateur:

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

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

Il y a beaucoup de modules dans l'espace de noms Date::, dont beaucoup peuvent vous aider à faire ce que vous avez besoin. Ou, vous pouvez simplement rouler votre propre:

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

Ressources

+0

Ne pas oublier 'DateTime'! – CanSpice

6

Vous pouvez utiliser le module Time::Piece (livré avec Perl 5.10 et, ou vous pouvez télécharger à partir CPAN), comme suit:

use strict; 
use warnings; 
use Time::Piece; 

my $today = localtime->ymd();  # Local time zone 
my $todayUtc = gmtime->ymd();  # UTC 
14

Ou vous pouvez utiliser le module DateTime qui semble être le module standard de gestion de date de facto e jours. Besoin de l'installer à partir du CPAN.

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

standardisation sur DateTime facilite certainement les choses plus simples pour ce programmeur et utiliser systématiquement pour tout un module assez complet semble une bonne idée dans une zone avec beaucoup de pièges et d'incohérences telles que les calculs de date et d'heure – plusplus

+4

Utiliser 'DateTime-> maintenant-> iso8601' si vous voulez que le temps soit inclus. – Flimm

5

Cela ne crée pas de variables temporaires:

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

Huh, je n'avais jamais envisagé cette utilisation pour la carte avant. Je ne sais pas si je l'aime, mais c'est certainement intelligent. –

+2

Ce genre de code est la raison pour laquelle j'aime et déteste perl –