Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中解析JSON日期时间字符串?_Python_Json - Fatal编程技术网

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

如何在python中解析JSON日期时间字符串?,python,json,Python,Json,在python中,我调用了一个远程API,该API以JSON格式返回数据。然后使用json模块和json.loads()解析数据。我遇到的问题是日期-我调用的系统返回的日期格式如下: /Date(1354011247940+0000)/ 其中json.parse只是解析为字符串。如何将其转换为python日期时间对象 编辑:与此不同,我无法控制要发送的数据,因此我不能在序列化之前简单地更改格式。您应该从该日期获取带有正则表达式的unix时间戳,然后使用datetime模块将其转换为可读格式:

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

/Date(1354011247940+0000)/
其中json.parse只是解析为字符串。如何将其转换为python日期时间对象


编辑:与此不同,我无法控制要发送的数据,因此我不能在序列化之前简单地更改格式。

您应该从该日期获取带有正则表达式的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:注意,在此日期中还有毫秒,它们将被此代码截断。您检查过了吗


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

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

有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

是的,我已经看过了——但是被接受的(也是唯一的)答案是在序列化时更改字符串的格式,这在这里不是一个选项。我无法控制数据或数据的序列化方式。如果我有mm yyyy格式的日期,并且我想将其转换为xxxxxxxxx之类的日期对象,那么另一种方法应该是什么呢?为了读取负数(即1970年1月1日之前的日期),请将正则表达式更改为like re.search(r“date”([+]\d+),“date(135401247940+0000)”)请注意,添加[+-]以阅读该标志。
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