Scheinbar ist das "richtige" JSON (nun ja JavaScript) Datumformat 2012-04-23T18:25:43.511Z - UTC und "Z". Ohne dieses wird JavaScript die lokale Zeitzone des Webbrowsers verwenden, wenn ein Date() Objekt aus dem String erstellt wird.
Für eine "naive" Zeit (was Python eine Zeit ohne Zeitzone nennt und dies als lokal annimmt), wird untenstehend die lokale Zeitzone erzwungen, damit sie dann korrekt in UTC konvertiert werden kann:
def default(obj):
if hasattr(obj, "json") and callable(getattr(obj, "json")):
return obj.json()
if hasattr(obj, "isoformat") and callable(getattr(obj, "isoformat")):
# Datum/Zeit Objekte
if not obj.utcoffset():
# füge lokale Zeitzone zu "naiver" lokaler Zeit hinzu
# https://stackoverflow.com/questions/2720319/python-figure-out-local-timezone
tzinfo = datetime.now(timezone.utc).astimezone().tzinfo
obj = obj.replace(tzinfo=tzinfo)
# konvertiere in UTC
obj = obj.astimezone(timezone.utc)
# entferne den UTC Offset
obj = obj.replace(tzinfo=None)
return obj.isoformat() + "Z"
elif hasattr(obj, "__str__") and callable(getattr(obj, "__str__")):
return str(obj)
else:
print("obj:", obj)
raise TypeError(obj)
def dump(j, io):
json.dump(j, io, indent=2, default=default)
Warum ist das so schwer.
0 Stimmen
Bevorzugen Sie die Verwendung einer Bibliothek oder möchten Sie dies selbst codieren?