3

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

/Date(1354011247940+0000)/

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

编辑:与将 JSON 转换为 Python 对象不同:如何处理 DateTime 转换?,我无法控制正在发送的数据,所以我不能在序列化之前简单地更改格式。

4

3 回答 3

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:请注意,您在此日期也有毫秒,它们将被此代码截断

于 2012-11-27T19:52:36.737 回答
1

您是否检查过将 JSON 转换为 Python 对象:如何处理 DateTime 转换??

这看起来非常相似 - 并且是moonsly提供的另一种方式,虽然,我认为moonsly提供了比其他类似线程(IMO)中提供的更“pythonic”的方法

于 2012-11-27T20:03:46.987 回答
1

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

/Date(1416458650000)/

有 9 或 13 个字符串。9 个字符字符串不需要除以 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
于 2014-12-11T23:47:15.433 回答