2010-06-24 26 views
7

Dada una cadena que representa una fecha/hora en formato ISO8601 (por ejemplo, 20100723T073000), necesito finalmente analizar esto en un formato proporcionado por el usuario usando una cadena de formato general strftime. Para hacer eso, necesito convertir la marca de tiempo ISO8601 en una marca de tiempo Unix. Hay una gran cantidad de módulos de manipulación de fecha/hora para Perl y estoy un poco abrumado. ¿Alguna sugerencia sobre cómo hacer esto?¿Cómo puedo convertir una marca de tiempo ISO8601 en tiempo Unix en Perl?

Respuesta

13

El módulo campeón para manejar fechas, horas, duraciones, zonas horarias y formatos es DateTime. Una vez que tenga su objeto DateTime, puede realizar una gran cantidad de operaciones en él, como sumar/restar otros objetos DateTime o objetos DateTime::Duration, o imprimirlo en otro formato.

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

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

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

impresiones: "2010-07-23 07:30:00"

4

Si usted no tiene o no quiere instalar el módulo DateTime::Format::ISO8601, puede analizar al menos un subconjunto de ISO8601 con HTTP::Date:

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

Como con cualquier manejo de fechas, tenga cuidado acerca de los problemas de zona horaria.

Cuestiones relacionadas