2017-04-26 2 views
1

Das Format von api Google Kalender ist wie '2017-04-26T13: 00: 00 + 02: 00'.konvertieren Unicode zu Datetime Strptime Python

Ich habe versucht, in Datetime ohne Erfolg zu konvertieren:

datetime.datetime.strptime('2017-04-26T13:00:00+02:00', '%Y-%m-%dT%H:%M:%S+%z') 

Es Fehler erhalte ich:

'ValueError: time data, '2017-04-26T13:00:00+02:00' does not match format '%Y-%m-%dT%H:%M:%S+%z'

Wie kann ich diesen Code zu arbeiten?

+0

Bitte markieren Sie keine Spam-Mails, diese Frage bezieht sich ausschließlich auf das Parsen von Daten und hat keinerlei Bezug zu Unicode und Google. –

+0

Danke. Ich habe die Frage bearbeitet. Ich habe gerade nicht nachgedacht. vielleicht müde. – prometeu

+1

Wir können% z verwenden. Es gibt Unterstützung – FallAndLearn

Antwort

2

ist dies, weil strptime für das %z Format eine Zeichenfolge, die aussieht wie erwartet: +0200 nicht +02:00, das heißt:

>>> datetime.datetime.strptime('2017-04-26T13:00:00+0200', '%Y-%m-%dT%H:%M:%S%z') 
datetime.datetime(2017, 4, 26, 13, 0, tzinfo=datetime.timezone(datetime.timedelta(0, 7200))) 

auf Ihrem Kontext so abhängig, entweder Sie die Zeichenfolge ändern strptime() Erwartungen zu passen, oder Sie Sie können eine höhere Bibliothek verwenden, um Ihre Daten zu verwalten. Wie maya oder pendulum, die sehr flexible Möglichkeiten für Format-Parsing und relative Datumsverwaltung bieten.

>>> import pendulum, maya # you need to pip install them 
>>> pendulum.parse('2017-04-26T13:00:00+02:00') 
<Pendulum [2017-04-26T13:00:00+02:00]> 
>>> maya.parse('2017-04-26T13:00:00+02:00') 
<MayaDT epoch=1493204400.0> 
2

Werfen Sie einen Blick auf dateutil, die parse Funktion wird Ihnen helfen.

>>> from dateutil.parser import parse 
>>> dt = parse('2017-04-26T13:00:00+02:00') 
>>> dt 
datetime.datetime(2017, 4, 26, 13, 0, tzinfo=tzoffset(None, 7200)) 
2

Sie mögen für PyTZ und Arrow, tho externe Module in der Dokumentation einen Blick nehmen, die Funktionalität zu Datum und Uhrzeit im Zusammenhang hinzuzufügen. Zum Beispiel mit dem Pfeil, können Sie es ziemlich leicht zu tun, wie folgt:

import arrow 

my_arrow_object = arrow.get('2017-04-26T13:00:00+02:00') 
my_datetime_object = my_arrow_object.datetime 

print(my_datetime_object) 
print(type(my_datetime_object)) 

Dieser Code druckt die erhaltenen Zeitstempel und die Art der my_datetime_object Objekt, das ein datetime.datetime:

2017-04-26 13:00:00+02:00 
<class 'datetime.datetime'> 

Pfeil ermöglicht auch um einfach "humanisierte" Zeitzeichenfolgen zu erzeugen (wie "vor einer Stunde" oder "vor zwei Monaten"), was praktisch sein kann.

Verwandte Themen