从python我正在调用一个以JSON格式返回数据的远程API。然后我使用json模块和json.loads()解析数据。我遇到的问题是日期 - 我正在调用的系统返回格式如下的日期:
/Date(1354011247940+0000)/
json.parse只是作为字符串解析出来的。如何将其转换为python日期时间对象?
编辑:与Convert JSON to Python object: how to handle DateTime conversion?不同,我无法控制所发送的数据,所以我不能简单地在序列化之前更改格式。
答案 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