【问题标题】:How to stop DjangoJSONEncoder from truncating microseconds datetime objects?如何阻止 DjangoJSONEncoder 截断微秒日期时间对象?
【发布时间】:2020-06-22 10:12:19
【问题描述】:

我有一个字典,里面有一个 datetime 对象,当我尝试 json 转储它时,Django 会截断微秒:

> dikt
{'date': datetime.datetime(2020, 6, 22, 11, 36, 25, 763835, tzinfo=<DstTzInfo 'Africa/Nairobi' EAT+3:00:00 STD>)}
> json.dumps(dikt, cls=DjangoJSONEncoder)
'{"date": "2020-06-22T11:36:25.763+03:00"}'

如何保留所有 6 微秒的数字?

【问题讨论】:

  • 将微秒截断为毫秒似乎是硬编码的,请参阅src
  • DjangoJSONEncoder 将微秒截断为整毫秒以与ECMA-262会面

标签: json django datetime


【解决方案1】:

DjangoJsonEncoder 支持 ECMA-262 规范。

您可以通过引入自定义编码器轻松克服这一问题。

class MyCustomEncoder(DjangoJSONEncoder):

    def default(self, obj):
        if isinstance(obj, datetime.datetime):
            r = obj.isoformat()
            if r.endswith('+00:00'):
                r = r[:-6] + 'Z'
            return r
        return super(MyCustomEncoder, self).default(obj)



dateime_object = datetime.datetime.now()
print(dateime_object)
print(json.dumps(dateime_object, cls=MyCustomEncoder))

>>> 2020-06-22 11:54:29.127120
>>> "2020-06-22T11:54:29.127120"

【讨论】:

    猜你喜欢
    • 2011-07-25
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 2020-04-10
    • 2012-02-19
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多