Python 带有tz偏移量的日期时间的strTime示例

Python 带有tz偏移量的日期时间的strTime示例,python,strptime,Python,Strptime,我有datetime字符串2020-10-23T11:50:19+00:00。我可以在没有时区的情况下将其解析为: >>> datetime.strptime('2020-10-23T11:50:19', '%Y-%m-%dT%H:%M:%S') datetime.datetime(2020, 10, 23, 11, 50, 19) 但是我在用时区的00:00版本解析它时遇到了麻烦。正确的方法是什么 >>> datetime.strptime('2020-1

我有datetime字符串
2020-10-23T11:50:19+00:00
。我可以在没有时区的情况下将其解析为:

>>> datetime.strptime('2020-10-23T11:50:19', '%Y-%m-%dT%H:%M:%S')
datetime.datetime(2020, 10, 23, 11, 50, 19)
但是我在用时区的
00:00
版本解析它时遇到了麻烦。正确的方法是什么

>>> datetime.strptime('2020-10-23T11:50:19+00:00', '%Y-%m-%dT%H:%M:%S+???')

dateutil.parser
函数将解析该时区格式:

from dateutil.parser import parse

dt = parse('2020-10-23T11:50:19+00:00')
print(dt.date())
print(dt.time())
print(dt.tzinfo)
结果:

2020-10-23
11:50:19
tzutc()
2020-10-23 11:50:19+00:00
如果需要,可以将单独的
日期
时间
tzinfo
对象组合成
日期时间
,如下所示:

dt = datetime.combine(dt.date(), dt.time(), tzinfo=dt.tzinfo)
print(dt)
结果:

2020-10-23
11:50:19
tzutc()
2020-10-23 11:50:19+00:00
您正在寻找%z:

>>> datetime.strptime('2020-10-23T11:50:19+00:00', '%Y-%m-%dT%H:%M:%S%z')
datetime.datetime(2020, 10, 23, 11, 50, 19, tzinfo=datetime.timezone.utc)
请注意一些Python版本兼容性注意事项:

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

更健壮的方法,它不是strptime,而是自Python 3.7以来仍在stdlib中:

>>> datetime.fromisoformat('2020-10-23T11:50:19+00:00')
datetime.datetime(2020, 10, 23, 11, 50, 19, tzinfo=datetime.timezone.utc)
由于此函数支持以下格式的字符串:

YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]]

其中*可以匹配任何单个字符(而不仅仅是T)。

%Y-%m-%dT%H:%m:%S%Z有一件事,参数颠倒了。格式字符串排在第二位。@JohnGordon对不起,是的,我已经更新了问题。我不明白结束这个问题的投票是“需要细节或清晰”。OP的要求似乎很明确。事实上,看起来你刚刚错过了3.7版的更新。可以预处理字符串以去掉最右边的冒号吗?