python 3.6中日期时间格式的时区偏移量

python 3.6中日期时间格式的时区偏移量,python,timezone,Python,Timezone,这段代码在Python3.7上运行,在3.6上失败 from datetime import datetime try: d = datetime.strptime('2019-07-30T00:00:00.000-05:00', '%Y-%m-%dT%H:%M:%S.%f%z') print(d) except ValueError as ve: print(str(ve)) ValueError:时间数据“2019-07-30T00:00:00.000-05:00

这段代码在Python3.7上运行,在3.6上失败

from datetime import datetime
try:
    d = datetime.strptime('2019-07-30T00:00:00.000-05:00', '%Y-%m-%dT%H:%M:%S.%f%z')
    print(d)

except ValueError as ve:
    print(str(ve))
ValueError:时间数据“2019-07-30T00:00:00.000-05:00”与格式“%Y-%m-%dT%H:%m:%S.%f%z”不匹配

python 3.6中的时区偏移格式是什么,例如-05:00?

来自:

对于感知对象:

%z utcoffset转换为±HHMM[SS[.ffffff]]形式的字符串,其中HH是表示UTC偏移小时数的2位字符串,MM是表示UTC偏移分钟数的2位字符串,SS是表示UTC偏移秒数的2位字符串,ffffff是表示UTC偏移微秒数的6位字符串。当偏移量为整数秒时,ffffff部分被省略,当偏移量为整数分钟时,ffffff和SS部分都被省略。例如,如果utcoffset返回timedeltahours=-3,minutes=-30,%z将替换为字符串'-0330'

在版本3.7中更改:UTC偏移量不限于整数分钟

在版本3.7中更改:当向strtime方法提供%z指令时,UTC偏移量可以使用冒号作为小时、分钟和秒之间的分隔符。例如,“+01:00:00”将被解析为一小时的偏移量。此外,提供的“Z”与“+00:00”相同

%Z 如果tzname返回None,则%Z将替换为空字符串。否则%Z将被返回值替换,返回值必须是字符串

这意味着在3.6中,偏移量限制为整数,并且需要在3.7之前删除冒号,因此:

d=datetime.strTime'2019-07-30T00:00:00.000-0500','%Y-%m-%dT%H:%m:%S.%f%z'
3.6中的格式为±HHMM[SS[.ffffff]]。您可以转换字符串

time_str = "2019-07-30T00:00:00.000-05:00"
time_str = time_str[0:-3]+time_str[-2:] 

我无法更改字符串输入,无法删除冒号。我可以通过另一种格式覆盖现有字符串吗?您可以在冒号前后分割字符串吗?如果您从未期望时区为:30关闭,您可以执行“%Y-%m-%dT%H:%m:%S.%f%z:00”,这不太合适,但可能会如答案中所述,3.6中的格式为±HHMM[SS[.ffffff]]。如果所有字符串都包含时区偏移量,并在小时和分钟之间使用冒号分隔符,则可以使用.joins.rsplit':',maxslit=1之类的内容稍微修改字符串,其中s是ISO 8601字符串,如'2019-07-30T00:00:00.000-05:00'。