ich verzweifle momentan an einer Aufgabe, die eigentlich ziemlich einfach und auch alltäglich sein sollte: Timestamps in Strings umwandeln und wieder zurück unter korrekter Behandlung von Zeitzonen und Sommerzeit.
Offenbar funktioniert das in der sonst sehr umfangreichen Standardbibliothek nur unter Hinzunahme von "dateutil". Aber auch dann kommt nicht wirklich das heraus, was man erwartet. Folgende Testergebnisse bei mir (lokale Zeitzone ist CET):
Code: Alles auswählen
import datetime, dateutil.tz, dateutil.parser
datetime.datetime.fromtimestamp(1445733000, dateutil.tz.tzlocal()).strftime('%H:%M %Z') # '02:30 CET'
datetime.datetime.fromtimestamp(1445736600, dateutil.tz.tzlocal()).strftime('%H:%M %Z') # '02:30 CET'Anders herum genau dasselbe:
Code: Alles auswählen
dateutil.parser.parse('2015-10-25 02:30:00 CET')
dateutil.parser.parse('2015-10-25 02:30:00 CEST')Mit dem einfacheren Modul "time" funktioniert zwar die Sommerzeit halbwegs, aber dafür macht es offenbar alles nur in der lokalen Zeitzone:
Code: Alles auswählen
time.mktime(time.strptime("2015-10-25 02:30:00 CET", "%Y-%m-%d %H:%M:%S %Z")) # 1445736600.0
time.mktime(time.strptime("2015-10-25 02:30:00 CEST", "%Y-%m-%d %H:%M:%S %Z")) # 1445733000.0
# soweit war das richtig, das war schon mal besser als mit datetime/dateutil. Aber nun:
time.mktime(time.strptime("2015-10-25 02:30:00 UTC", "%Y-%m-%d %H:%M:%S %Z")) # 1445736600.0 -> falsch.
Code: Alles auswählen
$ date +%s -d '2015-10-25 02:30:00 UTC'
1445740200
$ date +%s -d '2015-10-25 02:30:00 CET'
1445736600
$ date +%s -d '2015-10-25 02:30:00 CEST'
1445733000Gegooglet habe ich, da bin ich bisher nur auf dateutil gestoßen, aber, wie man sieht, hilft das auch nicht.
