JSON datetime между Python и JavaScript - PullRequest
383 голосов
/ 18 января 2009

Я хочу отправить объект datetime.datetime в сериализованной форме из Python с использованием JSON и десериализовать в JavaScript с использованием JSON. Каков наилучший способ сделать это?

Ответы [ 11 ]

0 голосов
/ 06 ноября 2018

Видимо «Правильный» формат даты 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)

почему это так сложно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...