2010-06-24 7 views
7

Étant donné une chaîne qui représente une date/heure au format ISO8601 (par exemple, 20100723T073000), je dois finalement analyser ceci dans un format fourni par l'utilisateur en utilisant une chaîne de format général strftime. Pour ce faire, je dois convertir l'horodatage ISO8601 en un horodatage Unix. Il y a énormément de modules de manipulation de date/heure pour Perl et je suis un peu débordé. Des suggestions sur la façon de faire cela?Comment convertir un horodatage ISO8601 en heure unix en Perl?

Répondre

13

Le module champion pour gérer les dates, heures, durées, fuseaux horaires et formats est DateTime. Une fois que vous avez votre objet DateTime, vous pouvez effectuer un grand nombre d'opérations, comme ajouter/soustraire d'autres objets DateTime ou des objets DateTime::Duration, ou l'imprimer dans un autre format.

use strict; use warnings; 
use DateTime; 
use DateTime::Format::ISO8601; 

my $dt = DateTime::Format::ISO8601->parse_datetime('20100723T073000'); 

print $dt->strftime('%F %T'); 

impressions: « 2010-07-23 07:30:00 »

4

Si vous n'avez pas ou ne voulez pas installer le module DateTime::Format::ISO8601, vous pouvez analyser au moins un sous-ensemble ISO8601 avec HTTP::Date:

$ perl -MHTTP::Date -wle 'print str2time("2013-11-30T23:05:03")' 
1385845503 

Comme toute manipulation date, soyez prudent sur le temps des problèmes de la zone.

Questions connexes