将ASP.NETJSON日期转换为Python日期时间

将ASP.NETJSON日期转换为Python日期时间,python,time,python-dateutil,Python,Time,Python Dateutil,我从其他人那里得到了一个回应,时间格式如下 ScheduleDate = "\/Date(1374811200000-0400)\/" StartTime = "\/Date(-2208931200000-0500)\/" 如何将上述时间转换为以下格式 "2012-01-01T10:30:00-05:00" 这就是我想到的,但是您的示例输入和示例输出都不匹配,所以我不确定这里是否存在时区偏移错误 #!/usr/bin/env python import datetime def pars

我从其他人那里得到了一个回应,时间格式如下

ScheduleDate = "\/Date(1374811200000-0400)\/"
StartTime = "\/Date(-2208931200000-0500)\/"
如何将上述时间转换为以下格式

"2012-01-01T10:30:00-05:00"

这就是我想到的,但是您的示例输入和示例输出都不匹配,所以我不确定这里是否存在时区偏移错误

#!/usr/bin/env python

import datetime

def parse_date(datestring):
    timepart = datestring.split('(')[1].split(')')[0]
    milliseconds = int(timepart[:-5])
    hours = int(timepart[-5:]) / 100
    time = milliseconds / 1000

    dt = datetime.datetime.utcfromtimestamp(time + hours * 3600)
    return dt.strftime("%Y-%m-%dT%H:%M:%S") + '%02d:00' % hours

ScheduleDate = "\/Date(1374811200000-0400)\/"
StartTime = "\/Date(-2208931200000-0500)\/"

print(parse_date(ScheduleDate))
print(parse_date(StartTime))
Windows似乎不喜欢
datetime.(utc)?fromtimestamp()
中的负值。可以要求它从Unix历元计算负时间增量:

#!/usr/bin/env python

import datetime

EPOCH = datetime.datetime.utcfromtimestamp(0)

def parse_date(datestring):
    timepart = datestring.split('(')[1].split(')')[0]
    milliseconds = int(timepart[:-5])
    hours = int(timepart[-5:]) / 100
    adjustedseconds = milliseconds / 1000 + hours * 3600

    dt = EPOCH + datetime.timedelta(seconds=adjustedseconds)
    return dt.strftime("%Y-%m-%dT%H:%M:%S") + '%02d:00' % hours

ScheduleDate = "\/Date(1374811200000-0400)\/"
StartTime = "\/Date(-2208931200000-0500)\/"

print(parse_date(ScheduleDate))
print(parse_date(StartTime))

你有一个“ASP.Net JSON日期”——微软开发的一种可怕的格式,它不符合任何标准,他们自己也因此放弃了ISO。我发布的dup链接展示了如何在Python中解析它,但是您应该回到rest服务的作者那里,让他们切换到ISO格式。他们可以使用MVC4.Close来实现这一点,这就是微软现在在MVC4.Close中所做的,但并不完全如此。第一部分是自1970年1月1日UTC以来的毫秒。第二部分是输出的本地偏移量,但它不会反映在第一部分中。因此,对于提供的两个值,
ScheduleDate
应等于
“2013-07-26T00:00:00-04:00”
StartTime
应等于
“1900-01-01T11:00-05:00”
。明白我所说的可怕格式是什么意思了吗?将其与ISO格式进行比较,ISO格式中显示的值已经调整,偏移量告诉您调整了多少。我将其调整为在计算中包含偏移量。是的,这是一个绝对可怕的格式!负值对我不起作用。我得到“ValueError:timestamp超出了platform localtime()/gmtime()函数的范围”是的。在2.7和3.3中尝试。