2012-11-27 154 views
3

从python我打电话给一个以JSON格式返回数据的远程API。然后使用json.loads()使用json模块解析数据。我遇到的问题是与日期 - 我打电话回报格式化像下面的日期系统:如何在python中解析JSON日期时间字符串?

/Date(1354011247940+0000)/ 

这json.parse刚刚解析出作为一个字符串。我怎样才能将其转换为python日期时间对象?

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

回答

4

你应该得到Unix时间戳和自今日起一个正则表达式,然后使用日期时间模块,将其转换为可读的格式:

>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:注意,你也有毫秒这个日期,他们将截断此代码

+0

应该是什么给我有MM-YYYY格式的日期,我想将其转换成像XXXXXXXXX约会对象中的另一种方式... .. ? – user2480542

1

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

这看起来非常相似 - 并以另一种方式是什么moonsly提供,但是,我认为moonsly提供了比在其他类似的线程提供了一个更“Python化”的做法(IMO)

+0

是的,我看了一下 - 但接受(并且唯一的)答案说在串行化时更改字符串的格式,这不是一个选项。我无法控制数据或者它是如何被序列化的。 – ibrewster

0

我不能”把这个添加到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