Typkonvertierung eines Zeitstempels in Python?
Hallo an alle Python-Programmierer.
Ich habe versucht mit einem Python-Programm automatisch die Zeitstempel aus einer .tdms Datei (LabView-Datei) auszulesen, zu konvertieren & als eine .xlsx Datei (Excel-Datei) wieder abzuspeichern.
Allerdings ist die Uhrzeit im Zeitstempel der konvertierten Excel-Datei komischerweise immer genau 2 Stunden früher als in der tdms-Datei.
Hier folgend sieht man einen kurzen Auszug eines .tdms Messschriebs vom Kanal „SM States“. Geöffnet mit einem EXCEL-tdms Plugin. Somit kann man quasi mit Excel die .tdms Dateien öffnen:
Hier wird die erste Uhrzeit mit 04:21:06,391 PM bzw. 16:21:06,391 im 24h Format angegeben.
Wenn ich nun mit den folgenden Codezeilen im 12h Format versuche die "Timestamp" Daten in eine .xlsx Datei zu schrieben, kommt dabei das Problem mit den 2 Stunden Zeitversatz heraus:
# Daten in Excel-Datei schreiben
with pd.ExcelWriter(xlsx_output_path) as writer:
for df_list, sheet_name in zip([sm_states_data_frames],
['SM States']):
for i, df in enumerate(df_list):
if 'Timestamp' in df.columns:
df['Timestamp'] = df['Timestamp'].apply(lambda x: x.strftime('%d.%m.%Y %I:%M:%S,%f %p'))
df.to_excel(writer, sheet_name=sheet_name, index=False)
Hier zum besseren Verständnis ein Bild vom Code:
Hier sieht man nun das Ergebnis der Excel-Datei. Das Format an sich ist wie im obrigen Bild der .tdms Datei. Allerdings werden hier Microsekunden statt Millisekunden angezeigt, was aber denke ich erst mal nicht das Problem sein sollte.
Jedoch sieht man, dass nun 02:21:06 Uhr PM angezeigt wird, statt 04:21:06 Uhr PM der Quell-tdms-Datei. Das gleiche Problem habe ich übrigens auch wenn ich versuche den Zeitstempel in ein 24h Format umzuwandeln.
Hier noch ein Bild vom Dateiformat des "Timestamp" Reiters der Quell-tdms-Datei:
Ich wäre sehr dankbar, wenn mir hier jemand weiter helfen könnte!
Viele Grüße!
Jonas
1 Antwort
Ein Versatz von 2 Stunden weist schon mal darauf hin, dass hier die Zeitzone falsch ist (zwischen UTC und MESZ liegen nämlich 2 Stunden).
Soweit ich sehe, berücksichtigst du die Zeitzone überhaupt nicht - dann wird wohl eine falsche angenommen.
Wenn man mit Datum und Zeit zu tun hat, ist es sehr empfehlenswert, durch die ganze Verarbeitungskette konsequent das ISO-8601-Datums- und Zeitformat mit expliziter Zeitzone oder auch durchgängig UTC zu verwenden. Ich weiß nicht, wie man das LabView beibringen kann, aber es geht sicherlich.
Hallo Jo,
vielen Dank für deine Info, Ja da hast du Recht, ich habe keine Zeitzone im Code berücksichtigt. Deine Aussage klingt mir aber sehr schlüssig. Ich werde mal schauen, ob das Einbinden der expliziten Zeitzone das Problem löst.
Viele Grüße!