如何解析python中的JSON日期时间字符串?

时间:2012-11-27 19:46:45

标签: python json

从python我正在调用一个以JSON格式返回数据的远程API。然后我使用json模块和json.loads()解析数据。我遇到的问题是日期 - 我正在调用的系统返回格式如下的日期:

/Date(1354011247940+0000)/

json.parse只是作为字符串解析出来的。如何将其转换为python日期时间对象?

编辑:与Convert JSON to Python object: how to handle DateTime conversion?不同,我无法控制所发送的数据,所以我不能简单地在序列化之前更改格式。

3 个答案:

答案 0 :(得分:5)

你应该从这个日期获得带有正则表达式的unix时间戳,然后使用datetime模块将其转换为可读格式:

>m = re.search(r"Date\((\d+)\+", 'Date(1354011247940+0000)')
>print(datetime.datetime.fromtimestamp(int(m.group(1))/1000.0).strftime('%Y-%m-%d %H:%M:%S'))
2012-11-27 12:14:07

UPD:请注意,此日期还有毫秒,它们将被此代码截断

答案 1 :(得分:1)

您检查了Convert JSON to Python object: how to handle DateTime conversion?吗?

这看起来非常相似 - 并且是一种替代方式,但是,我认为moonsly提供了比其他类似线程(IMO)提供的更多'pythonic'方法

答案 2 :(得分:0)

我无法将此添加到moonsly的答案(没有代表)的评论中,所以我把它作为一个单独的答案。 只想添加一些其他可能有用的东西。 我有同样的问题,但json日期在我的数据中出现的有点不同(即没有+符号):

/Date(1416458650000)/

有9或13个字符串。 9个char字符串不需要除以1000.0。 我也没有使用正则表达式来提取时间字符串。

MILLISECONDS = '/Date(1416458650000)/'.split('(')[1][:-2]
print datetime.datetime.fromtimestamp(int(MILLISECONDS)/1000.0).strftime('%Y-%m-%d %H:%M:%S')
2014-11-20 15:44:10

我也可以

SECONDS = '/Date(1416458650000)/'.split('(')[1][:-5]
print datetime.datetime.fromtimestamp(float(SECONDS)).strftime('%Y-%m-%d %H:%M:%S')
2014-11-20 15:44:10