UNIX Umwandlung --> UTC oder lokale Zeit kommt raus?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
karou
User
Beiträge: 9
Registriert: Donnerstag 25. Juli 2019, 09:14

Donnerstag 19. September 2019, 08:57

Hallo an alle,

ich arbeite noch nicht lang mit Python und habe ein Programm geschrieben, das UNIX Zeitstempel in lesbare Zeit umwandeln soll. Die Zeitstempel sind in einer Datenbank gespeichert. Für die Umsetztung habe ich folgenden Code genutzt:

Code: Alles auswählen

time = pandas.to_datetime(row[7],unit ='ms')
Ich habe händisch einige Zeitstempel umgewadelt und festgestellt, dass z.B. Zeitstempel vom 10.09.2019 10:00 Uhr von meinem Programm umgewandelt werden zu 10.09.2019 9:00 Uhr. Ich glaube es liegt daran das die Zeit in UTC umgerechnet wird, bin mir aber nicht sicher ob das an dem oben eingefügten Code liegt. Der einziege andere Code den ich im Zusammenhang mit den Zeitstempeln verwende ist folgender Code:

Code: Alles auswählen

 #Sortieren der Zeitstempel
            stamp_keys.sort(key=lambda date: datetime.strptime(date, '%Y-%m-%d %H:%M:%S.%f')) 
Kann ich einen der genannten Befehle so umstellen das er mir lokale Zeit ausgibt und keine UTC Zeit?

Danke für eure Hilfe
Sirius3
User
Beiträge: 10595
Registriert: Sonntag 21. Oktober 2012, 17:20

Donnerstag 19. September 2019, 09:17

Wenn Du mit Zeitstempeln arbeiten willst, wie bei Deinem sort-Beispiel, dann solltest Du das entweder als UNIX-Timestamp lassen, oder mit Datetime-Objekten. Auf keinen Fall darfst Du die String-Repräsentation in lokaler Zeit dafür verwenden, das gibt mindestens einmal im Jahr Fehler.

Erst wenn es wirklich um die Ausgabe geht, also das Schreiben auf den Bildschirm, für die menschliche Verarbeitung, kannst Du einen Datumsobjekt in einen String umwandeln. Für Zeitzonen-Umrechnung gibt es z.B. pytz.
karou
User
Beiträge: 9
Registriert: Donnerstag 25. Juli 2019, 09:14

Donnerstag 19. September 2019, 09:39

Ah Ok ich kann versuchen das Umzustellen!

Wie wäre das wenn ich die Umwandlung so wie sie jetzt ist lasse? Würde der Befehl Winter und Sommerzeit beachten und immer die richtige UTC-Zeit ausgeben? Ich hab bis jetzt nur Testdatensätze aus der Winterzeit bekommen um mein Programm zu testen und in der Winterzeit hat das immer geklappt.
Benutzeravatar
__blackjack__
User
Beiträge: 4243
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Donnerstag 19. September 2019, 10:13

@karou: Welcher Befehl? Und was gibt es bei Sommer und Winterzeit bei UTC-Zeit zu beachten? UTC kennt das doch gar nicht‽ Die erste Frage die man beantworten müsste ist was die Eingabedaten die Du hast bedeuten – für welche Zeitzone gelten die? Sind das lokale Zeiten oder sind die UTC? So wie `to_datetime()` aufgerufen wird, sollten das besser Millisekunden seit 1970-01-01 Mitternacht in UTC sein.

Falls das zutrifft und Du gerne lokale Zeit haben möchtest, müsstest Du ``utc=True`` angeben und danach mit der `tz_convert()`-Methode beispielsweise nach "Europe/Berlin" konvertieren.
“Give a man a fire and he's warm for a day, but set fire to him and he's warm for the rest of his life.”
— Terry Pratchett, Jingo
karou
User
Beiträge: 9
Registriert: Donnerstag 25. Juli 2019, 09:14

Donnerstag 19. September 2019, 14:33

Die eingegeben Werte sind MEZ Zeiten abgespeichert in UNIX und deswegen muss man wenn man sie in UTC Umrechnet und sie z.B. nach Din 5008 ausgibt Sommer und Winterzeit beachten!

Aber ich hab Tests mit Zeiten aus diesem Monat durchgeführt und das hat meine Frage beantwortet!
Antworten