Timezone ändern
-
Hallo, wie kann man QDateTime() eine andere Zeitzone zuweisen?
UTC = QDateTime.fromString("2025-10-26 02:00:00" ,"yyyy-MM-dd hh:mm:ss") local = QDateTime(UTC.toLocalTime()) UTC = UTC.setTimeZone('Australia/Melbourne') print('Timezone: ', UTC.timeZone()) print("UTC time is:", UTC) print("Local time is:", local)
Bei 'setTimeZone' wird gemeckert... Wie muss die Zeile richtig lauten?
Danke - Stefan
-
SetTimeZone möchte einen string, keinen character.
-
@StefKe said in Timezone ändern:
Bei 'setTimeZone' wird gemeckert.
Was heist das denn genau? Bitte immer die Fehlermeldung posten.
-
@Christian-Ehrlicher Das ist wohl Python in diesem Fall
-
Hier die Fehlermeldung:
Ausnahme: TypeError 'PySide6.QtCore.QDateTime.setTimeZone' called with wrong argument types: PySide6.QtCore.QDateTime.setTimeZone(str) Supported signatures: PySide6.QtCore.QDateTime.setTimeZone(Union[PySide6.QtCore.QTimeZone, PySide6.QtCore.QTimeZone.Initialization], PySide6.QtCore.QDateTime.TransitionResolution = Instance(PySide6.QtCore.QDateTime.TransitionResolution.LegacyBehavior)) File "C:\Users\Stefan\Documents\Qt\diagramm\test.py", line 7, in <module> UTC = UTC.setTimeZone("Australia/Melbourne") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Danke - Stefan
-
Versuch mal den String vorher noch zu einem
QTimeZone
zu machen. Anscheinend magsetTimeZone
auch nicht mal direkt einen String sondern akzeptiert nur die in der Meldung beschriebenen Typen.UTC = UTC.setTimeZone(QTimeZone("Australia/Melbourne"))
-
da erscheint die gleiche Fehlermeldung:
Ausnahme: TypeError 'PySide6.QtCore.QDateTime.__init__' called with wrong argument types: PySide6.QtCore.QDateTime.__init__(str) Supported signatures: PySide6.QtCore.QDateTime.__init__() PySide6.QtCore.QDateTime.__init__(PySide6.QtCore.QDate, PySide6.QtCore.QTime, PySide6.QtCore.Qt.TimeSpec, int = 0) PySide6.QtCore.QDateTime.__init__(PySide6.QtCore.QDate, PySide6.QtCore.QTime, PySide6.QtCore.QDateTime.TransitionResolution = Instance(PySide6.QtCore.QDateTime.TransitionResolution.LegacyBehavior))
Aber vielleicht bin ich es auch falsch angegangen. Hab das Problem jetzt so gelöst:
def lbl_max_date_text(self, text): qdate_time = QDateTime.fromString(text, "yyyy-MM-dd hh:mm:ss") if qdate_time.timeZoneAbbreviation() == "Mitteleuropäische Zeit": korr_sec = 3600 else: korr_sec = 7200
so kann der gelieferte Date-String in Abhängkeit der Sommer- / Winterzeit in localtime umgerechnet werden. Aber sicherlich hab ich was an anderer Stelle verpasst :-)
Danke - Stefan -
@StefKe said in Timezone ändern:
da erscheint die gleiche Fehlermeldung:
Ist nicht die gleiche Meldung bzw. nicht die selbe Ursache :)
Bin jetzt nicht so der Python Experte, aber glaube es failt wegen der erneuten Zuweisung auf
UTC
...
setTimeZone
hat, soweit ich sehe, keinen Rückgabe-Typ.
(Hab die Zeile vorhin einfach so von dir übernommen)Versuch mal das Beispiel aus der Doku:
local = QDateTime(QDateTime.currentDateTime()) print("Local time is:", local) UTC = QDateTime(local) UTC.setTimeSpec(Qt.UTC) print("UTC time is:", UTC) print("There are", local.secsTo(UTC), "seconds difference between the datetimes.")
-
@StefKe said in Timezone ändern:
UTC = UTC.setTimeZone('Australia/Melbourne')
setTimeZone(toZone[, resolve=QDateTime.TransitionResolution.LegacyBehavior])
Sets the time zone used in this datetime to toZone.
setTimeZone()
gibt keinen Wert zurück. AlsoUTC =
ist falsch.Und string
'Australia/Melbourne'
funktioniert nicht, dass muss byte array sein. Probieren Sie es aus:UTC.setTimeZone(b'Australia/Melbourne')`
[Jetzt haben Sie die Antwort von @Pl45m4 . Vieleicht hat er recht.]