Видимо «Правильный» формат даты JSON (хорошо JavaScript) - 2012-04-23T18: 25: 43.511Z - UTC и «Z». Без этого JavaScript будет использовать локальный часовой пояс веб-браузера при создании объекта Date () из строки.
Для «наивного» времени (которое Python называет временем без часового пояса, и это предполагает локальный характер), приведенное ниже значение заставит местный часовой пояс , чтобы его можно было затем правильно преобразовать в UTC:
def default(obj):
if hasattr(obj, "json") and callable(getattr(obj, "json")):
return obj.json()
if hasattr(obj, "isoformat") and callable(getattr(obj, "isoformat")):
# date/time objects
if not obj.utcoffset():
# add local timezone to "naive" local time
# https://stackoverflow.com/questions/2720319/python-figure-out-local-timezone
tzinfo = datetime.now(timezone.utc).astimezone().tzinfo
obj = obj.replace(tzinfo=tzinfo)
# convert to UTC
obj = obj.astimezone(timezone.utc)
# strip the 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)
почему это так сложно.