Frage

Ich habe einen UTC-Zeitstempel in dem IS8601-Format und ich versuche, es zu Unix-Zeit zu konvertieren. Dies ist meine Konsolensitzung:

In [9]: mydate
Out[9]: '2009-07-17T01:21:00.000Z'
In [10]: parseddate = iso8601.parse_date(mydate)

In [14]: ti = time.mktime(parseddate.timetuple())

In [25]: datetime.datetime.utcfromtimestamp(ti)
Out[25]: datetime.datetime(2009, 7, 17, 7, 21)
In [26]: datetime.datetime.fromtimestamp(ti)
Out[26]: datetime.datetime(2009, 7, 17, 2, 21)

In [27]: ti
Out[27]: 1247815260.0
In [28]: parseddate
Out[28]: datetime.datetime(2009, 7, 17, 1, 21, tzinfo=<iso8601.iso8601.Utc object at 0x01D74C70>)

Wie Sie sehen können, kann ich nicht die richtige Zeit zurück. Die Stunde voraus ist um eins, wenn ich fromtimestamp () verwenden, und es ist vor sechs Stunden, wenn ich verwende utcfromtimestamp ()

Jede Beratung?

Danke!

War es hilfreich?

Lösung

Sie können eine struct_time in UTC mit datetime.utctimetuple() und dann wandeln diese in einem Unix-Zeitstempel mit calendar.timegm() :

calendar.timegm(parseddate.utctimetuple())

Diese kümmert sich auch um jede Sommerzeit versetzt, weil utctimetuple() diese normalisiert.

scroll top