如何解决带tz偏移量的日期时间的strptime示例
我有日期时间字符串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+???')
解决方法
您正在寻找%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
指令提供给strptime()
方法时,UTC偏移量可以用冒号作为小时,分钟和秒之间的分隔符。例如,'+01:00:00'
将被解析为一小时的偏移量。此外,提供'Z'
与'+00:00'
相同。
更强大的方法,它不是strptime
,但自Python 3.7起仍在stdlib中:
>>> datetime.fromisoformat('2020-10-23T11:50:19+00:00')
datetime.datetime(2020,tzinfo=datetime.timezone.utc)
与documented一样,此函数支持以下格式的字符串:
YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]]
其中*可以匹配任何单个字符(不仅仅是T)。
, 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()
如果需要,可以将单独的date
,time
和tzinfo
对象组合成datetime
,例如:
dt = datetime.combine(dt.date(),dt.time(),tzinfo=dt.tzinfo)
print(dt)
结果:
2020-10-23 11:50:19+00:00
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。