Comment puis-je analyser les dates et les convertir fuseaux horaires en Perl?
J'ai utilisé le localtime fonction en Perl pour obtenir la date et l'heure actuelles, mais besoin d'analyser dans les dates. J'ai un GMT date dans le format suivant: "20090103 12:00" je tiens à analyser dans un objet date, je peux travailler avec et puis convertir le GMT, heure/date dans mon fuseau horaire actuel qui est actuellement en Heure normale de l'est. Donc, je voudrais convertir "20090103 12:00" à "20090103 7:00" aucune info sur comment faire ce serait grandement apprécié.
Vous devez vous connecter pour publier un commentaire.
Parce que le Perl construit en date de la manipulation des interfaces sont un peu maladroit, et vous vous retrouvez à passer une demi-douzaine de variables, la meilleure façon est d'utiliser DateTime ou Heure: À La Pièce. DateTime est la chantent, dansent Perl objet date, et vous aurez probablement souhaitez éventuellement utiliser, mais le Temps: la Pièce est plus simple et parfaitement adaptée à cette tâche, a l'avantage de l'expédition avec 5.10 et la technique de base est le même pour les deux.
Voici la simple, flexible en utilisant le Temps: à la Pièce et strptime.
Et voici l'en-main, pour le contraste.
Puisque le format est fixe, une expression régulière fera l'amende juste, mais si le changement de format, vous aurez à modifier la regex.
Puis de le convertir à l'époque Unix temps (secondes depuis le 1er janvier 1970)
Et puis retour à votre heure locale.
use POSIX qw(strftime)
sur Unix et les systèmes Windows à partir d'au moins Perl 5.6.0 de l'avant. Qui permet au final de "rouler" pour devenir à la fois plus court et plus facile à gérer:my $local_date = strftime "%Y%m%d %H:%M\n", localtime($time);
.DateTime
module n'a pas de date de l'analyse, dans son répertoire. Voici la citation de pod:This module does not parse dates! Instead, take a look at the various DateTime::Format::* modules on CPAN
Voici un exemple, en utilisant DateTime et ses strptime module de format.
Si vous aviez voulu analyser localtime, voici comment vous pouvez le faire 🙂
C'est ce que je ferais ...
Vous pouvez également utiliser
Time::ParseDate
etparsedate()
au lieu deDate::Parse
etstr2time()
. Notez que le standard de facto de l'atm. semble être DateTime (mais vous ne le souhaitez pas utiliser la syntaxe OO juste pour convertir un timestamp).Faites votre choix:
Il ya un zillion d'autres, sans doute, mais ils sont probablement les prétendants.