Quel est le moyen le plus efficace pour obtenir la date actuelle au format ISO (par exemple « 2010-10-06 ») en utilisant Perl?Comment obtenir la date actuelle au format ISO en utilisant Perl?
Répondre
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];
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
- Date :: espace de noms du CPAN: http://search.cpan.org/search?query=Date%3A%3A&mode=module
Ne pas oublier 'DateTime'! – CanSpice
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
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;
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
Utiliser 'DateTime-> maintenant-> iso8601' si vous voulez que le temps soit inclus. – Flimm
Cela ne crée pas de variables temporaires:
printf "%d-%02d-%02d", map { $$_[5]+1900, $$_[4]+1, $$_[3] } [localtime];
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. –
Ce genre de code est la raison pour laquelle j'aime et déteste perl –
Pourquoi êtes-vous inquiet de l'efficacité? Est-ce que votre profileur vous a dit que cette section de votre code est un hotspot? – Daenyth