Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.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
在Python2.7中,如何计算两个带时区的时间字符串的差?_Python_Parsing_Datetime_Timezone_Timedelta - Fatal编程技术网

在Python2.7中,如何计算两个带时区的时间字符串的差?

在Python2.7中,如何计算两个带时区的时间字符串的差?,python,parsing,datetime,timezone,timedelta,Python,Parsing,Datetime,Timezone,Timedelta,我有两条线 s1 = "2013-11-21T07:45:51ZUTC+0000" # Europe s2 = "2013-11-21T13:15:28ZUTC+0530" # India 我想知道以秒为单位的差异(应该是23秒)。 我试过: 这不是正确的结果。我必须做什么才能得到正确的结果?蒂亚 假设日期字符串的格式相同。通过从字符串中删除'ZUTC',可以帮助解析函数找出正确的日期。像这样: from dateutil.parser import parse s1 = "2013-11-

我有两条线

s1 = "2013-11-21T07:45:51ZUTC+0000" # Europe
s2 = "2013-11-21T13:15:28ZUTC+0530" # India
我想知道以秒为单位的差异(应该是23秒)。 我试过:


这不是正确的结果。我必须做什么才能得到正确的结果?蒂亚

假设日期字符串的格式相同。通过从字符串中删除'ZUTC',可以帮助解析函数找出正确的日期。像这样:

from dateutil.parser import parse

s1 = "2013-11-21T07:45:51ZUTC+0000" # Europe
s2 = "2013-11-21T13:15:28ZUTC+0530" # India

def new_parse(string):
    return parse(string.replace('ZUTC', ''))

dt1 = new_parse(s1)
dt2 = new_parse(s2)
print (dt1-dt2).total_seconds()

实际上是23秒。

偏移量相当大。。格式奇怪。结果,时区被解析为错误的方向。与您的期望值相差11小时。非常感谢!不幸的是,这适用于Python3.2.3,但不适用于Python2.7.3。我仍然需要Python2并重新表述了我的问题;它假装使用ISO8601,但也使用偏移量(
Z
表示UTC)。删除
ZUTC
至少使其符合ISO8601标准。谢谢,此解决方案运行良好!我甚至可以找到添加了错误“Z”的罪犯代码,并以正确的方式解决此问题。
from dateutil.parser import parse

s1 = "2013-11-21T07:45:51ZUTC+0000" # Europe
s2 = "2013-11-21T13:15:28ZUTC+0530" # India

def new_parse(string):
    return parse(string.replace('ZUTC', ''))

dt1 = new_parse(s1)
dt2 = new_parse(s2)
print (dt1-dt2).total_seconds()
>>> import datetime
>>> str(datetime.datetime.strptime("2013-11-21T07:45:51ZUTC+0000", "%Y-%m-%dT%H:%M:%SZ%Z%z") - datetime.datetime.strptime("2013-11-21T13:15:28ZUTC+0530", "%Y-%m-%dT%H:%M:%SZ%Z%z"))
'0:00:23'