Python 带有tz偏移量的日期时间的strTime示例
我有datetime字符串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
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版的更新。可以预处理字符串以去掉最右边的冒号吗?