为了账号安全,请及时绑定邮箱和手机立即绑定

Python和JavaScript之间的JSON日期时间

/ 猿问

Python和JavaScript之间的JSON日期时间

慕的地6264312 2019-07-22 14:39:30

Python和JavaScript之间的JSON日期时间

我想从Python中发送一个序列化形式的datetime.datetime对象杰森并在JavaScript中使用JSON进行反序列化。做这件事最好的方法是什么?



查看完整描述

3 回答

?
慕的地2183247

您可以将“默认”参数添加到json.ddump以处理此问题:

date_handler = lambda obj: (
    obj.isoformat()
    if isinstance(obj, (datetime.datetime, datetime.date))
    else None)json.dumps(datetime.datetime.now(), default=date_handler)'"2010-04-20T20:08:21.634121"'

那就是ISO 8601格式。

一个更全面的默认处理程序函数:

def handler(obj):
    if hasattr(obj, 'isoformat'):
        return obj.isoformat()
    elif isinstance(obj, ...):
        return ...
    else:
        raise TypeError, 'Object of type %s with value of %s is not JSON serializable' % (type(obj), repr(obj))

更新:添加类型和值的输出。
更新:也处理日期


查看完整回答
反对 回复 2019-07-22
?
森栏

对于跨语言项目,我发现字符串包含RFC 3339约会是最好的方法。RFC 3339日期如下:

  1985-04-12T23:20:50.52Z

我认为大多数格式是显而易见的。唯一有点不寻常的事情可能是结尾的“Z”。它代表GMT/UTC。您还可以为CEST添加一个时区偏移量,如+02:00(夏季为德国)。我个人更喜欢把所有的东西保存在UTC,直到它被显示出来。

为了显示、比较和存储,您可以在所有语言中使用字符串格式。如果您需要计算的日期,那么在大多数语言中很容易将其转换回本机日期对象。

所以生成这样的JSON:

  json.dump(datetime.now().strftime('%Y-%m-%dT%H:%M:%SZ'))

不幸的是,Javascript的日期构造函数不接受RFC 3339字符串,但是有很多字符串解析器可在互联网上找到。

huTools.hujson尝试处理在Python代码中可能遇到的最常见的编码问题,包括日期/日期时间对象,同时正确处理时区。


查看完整回答
反对 回复 2019-07-22
?
忽然笑

假设您有一个Python datetime对象,d,使用datetime.Now()创建。它的价值是:

datetime.datetime(2011, 5, 25, 13, 34, 5, 787000)

您可以将其序列化为JSON,作为ISO 8601日期时间字符串:

import json    
json.dumps(d.isoformat())

示例datetime对象将序列化为:

'"2011-05-25T13:34:05.787000"'

一旦在Javascript层接收到此值,就可以构造Date对象:

var d = new Date("2011-05-25T13:34:05.787000");

从Javascript 1.8.5开始,Date对象有一个toJSON方法,它以标准格式返回字符串。因此,要将上面的Javascript对象序列化回JSON,命令如下:

d.toJSON()

这会让你:

'2011-05-25T20:34:05.787Z'

这个字符串一旦在Python中接收到,就可以反序列化回datetime对象:

datetime.strptime('2011-05-25T20:34:05.787Z', '%Y-%m-%dT%H:%M:%S.%fZ')

这将导致以下datetime对象,该对象与您开始使用的对象相同,因此是正确的:

datetime.datetime(2011, 5, 25, 20, 34, 5, 787000)


查看完整回答
反对 回复 2019-07-22

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信