Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.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解析Microsoft JSON日期?_Python_Json - Fatal编程技术网

如何用Python解析Microsoft JSON日期?

如何用Python解析Microsoft JSON日期?,python,json,Python,Json,我必须读取一个JSON文件,它的日期字段格式如下 “MyDate”:“/Date(1603284014088)/” 我找到了一些用其他语言(JavaScript、Kotlin)解析它的示例,但在Python中没有 我可以在SCOTT HANSELMAN的这篇文章中发现,它们是Unix时代开始以来的毫秒,有时带有时区。所以我可以写一个简单的函数来解码它 import re from datetime import datetime, timedelta def decode_date (enco

我必须读取一个JSON文件,它的日期字段格式如下

“MyDate”:“/Date(1603284014088)/”

我找到了一些用其他语言(JavaScript、Kotlin)解析它的示例,但在Python中没有

我可以在SCOTT HANSELMAN的这篇文章中发现,它们是Unix时代开始以来的毫秒,有时带有时区。所以我可以写一个简单的函数来解码它

import re
from datetime import datetime, timedelta

def decode_date (encoded_date):
    mask = "\/Date\(([0-9]*)\)"
    offset = datetime(1970, 1, 1)
    my_matchs = re.match(mask, encoded_date).groups()
    if len(my_matchs) == 1:
        return datetime(1970, 1, 1) + timedelta(milliseconds=int(my_matchs[0]))
    else:
        return None
    

encoded = "/Date(1603284014088)/"
print (decode_date(encoded))

此函数无法解析带有时区的日期,因为我很懒:),我的问题是-是否有一些库可以在Python中立即解析它?

鉴于您已经能够使用正则表达式提取日期,请尝试以下代码进行转换:

import datetime

s = '1603284014088'
fmt = "%Y-%m-%d %H:%M:%S"

# Local time
t = datetime.datetime.fromtimestamp(float(s)/1000.)
print (t.strftime(fmt))

# UTC time
t_utc = datetime.datetime.utcfromtimestamp(float(s)/1000.)
print (t_utc.strftime(fmt))

你不会告诉创建该服务的人eve ASP.NET Web API使用ISO8601作为日期。几乎10年内没有人使用这个Unix时间戳。您可以使用
datetime.fromtimestamp
直接转换Unix时间戳值,无需这样做yourself@PanagiotisKanavos自从大纪元被返回以来,我可以忍受毫秒。真正不需要的是它周围的
/Date(…)
包装。我编辑代码是为了处理不匹配的字符串。。我完全同意Panagiotis Kanavos的观点,但这是一个已经结束的项目,我现在可以请那个人更改它。你好,你有时间查看我的回复吗?如果它对你有用,请考虑它的投票和/或选择它作为最终答案。谢谢你的时间!不需要调用
float
。除以浮点将产生浮点结果。在Python3中,
/
总是会产生一个浮点,即使两个参数都是
int
s,所以
s/1000
就足够了。@chepner
s
是一个字符串,所以你需要调用
float
。哦,对不起,我走在前面了。我假设
s
已经是
int
。但也就是说,
int(s)/1000
就足够了,而且“更严格”,因为人们期望
s
int
的字符串表示形式。