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?
7
A
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.