2012-07-30 9 views
5

ich mit Strings repräsentieren iso8601 Zeitstempel in Python zu tun haben.Python: wie Zeitstempel zu handhaben (ISO8601)

Meine Zeitstempel Zeichenfolge sind daher in der folgenden Form:

timestamp = "2011-08-18T10:29:47+03:00" 

Zeit sie in Python Ich verwende Umwandlung:

timestamp = timestamp[:-6] 
timestamp = datetime.datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S") 

Aber auf diese Weise verliere ich alle Informationen über die Zeit, Zone. Ich habe auf viele Beispiele hier zu sehen, so etwa Zeitstempel und Python, leider war niemand als auch die Zeitzone zu bewahren oder wiederherzustellen nur die Zeitzone Verzögerung mit:

delay = timestamp[-6:] 

ich auch versucht:

timestamp = "2011-08-18T10:29:47+03:00" 
timestamp = datetime.datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S%z") 

aber es kehrte

ValueError: 'z' is a bad directive in format '%Y-%m-%dT%H:%M:%S%z' 

können Sie einen kleinen Einblick geben?

+0

könnten Sie meinen [Internet Datum/Uhrzeit-Format in RFC 3339 (ein Profil von ISO 8601)] (http://tools.ietf.org/html/rfc3339#section-5.6) beschrieben – jfs

+0

verwandt: [ISO zu Datetime Objekt: 'z' ist eine schlechte Richtlinie] (http://stackoverflow.com/q/20194496/4279) – jfs

Antwort

2

Das python iso8601 Modul mit eingebautem wird wunderbare parse_date Methode, die Zeitzone info verarbeiten kann:

>>> import iso8601 
>>> iso8601.parse_date("2007-01-25T12:00:00Z") 
datetime.datetime(2007, 1, 25, 12, 0, tzinfo=<iso8601.iso8601.Utc ...>) 

>>> iso8601.parse_date("2011-08-18T10:29:47+03:00") 
datetime.datetime(2011, 8, 18, 10, 29, 47, tzinfo=<FixedOffset '+03:00'>) 

Wenn Sie es in einer anderen Zeitzone konvertieren möchten, verwenden Sie die astimezone(tz) Methode

Wenn Sie die UTC-Datetime erhalten möchten, können Sie die utctimetuple() Methode verwenden.

+0

kühlen. Können Sie mir sagen, wie Sie das Ergebnis in UTC + 0 konvertieren? – user601836

+1

@ user601836: Ich habe meine Antwort mit 2 Lösungen aktualisiert das Datum –

+0

empfehle ich erhalten konvertieren nicht, dass die Bibliothek. Das letzte Update war 2007 und es akzeptiert nicht alle gültigen Formate. – tback

1

Sie benötigen ein externes Modul hinzufügen, die Zeitzone Unterstützung zur Verfügung stellt; die pytz module bietet Ihnen die notwendigen Zeitzone-Datenbank.

müssen Sie entweder die Zeitzone von Hand parsen eine pytz Zeitzone zu errichten, oder ein Paket wie zc.iso8601 oder iso8601 verwenden Sie die Analyse tun:

from zc.iso8601.parse import datetimetz 
datetimetz(timestamp) 
Verwandte Themen