2010-06-24 6 views
7

Angesichts einer Zeichenfolge, die ein Datum/Uhrzeit im ISO8601-Format darstellt (z. B. 20100723T073000), muss ich dies schließlich in ein benutzerdefiniertes Format mit einer allgemeinen strftime Formatzeichenfolge analysieren. Um das zu tun, muss ich den ISO8601-Zeitstempel in einen Unix-Zeitstempel konvertieren. Es gibt eine riesige Menge an Datum/Zeit-Manipulations-Modulen für Perl und ich bin ein wenig überfordert. Irgendwelche Vorschläge, wie man das macht?Wie kann ich einen ISO8601-Zeitstempel in Unix-Zeit in Perl konvertieren?

Antwort

13

Das Champion-Modul für die Verarbeitung von Datum, Uhrzeit, Dauer, Zeitzonen und Formaten ist DateTime. Sobald Sie Ihr DateTime-Objekt haben, können Sie eine große Anzahl von Operationen ausführen, wie das Hinzufügen/Subtrahieren anderer DateTime-Objekte oder DateTime::Duration Objekte oder das Ausdrucken in einem anderen Format.

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

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

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

druckt: „2010-07-23 07.30.00“

4

Wenn Sie das DateTime::Format::ISO8601 Modul nicht wollen oder nicht installieren, können Sie zumindest eine Teilmenge von parsen ISO8601 mit HTTP::Date:

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

Wie bei jedem Zeitpunkt Handhabung vorsichtig seine Zeitzone Fragen.