gpt4 book ai didi

python - python - 如何在没有dateutil的情况下将时区感知字符串转换为Python中的日期时间?

转载 作者:IT老高 更新时间:2023-10-28 20:24:02 24 4
gpt4 key购买 nike

我必须将像 "2012-11-01T04:16:13-04:00" 这样的时区感知字符串转换为 Python datetime 对象。

我看到了具有解析功能的 dateutil 模块,但我真的不想使用它,因为它添加了依赖项。

那我该怎么做呢?我尝试了类似以下的方法,但没有运气。

datetime.datetime.strptime("2012-11-01T04:16:13-04:00", "%Y-%m-%dT%H:%M:%S%Z")

最佳答案

从 Python 3.7 开始,datetime.datetime.fromisoformat() 可以处理您的格式:

>>> import datetime
>>> datetime.datetime.fromisoformat('2012-11-01T04:16:13-04:00')
datetime.datetime(2012, 11, 1, 4, 16, 13, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=72000)))

在较旧的 Python 版本中,您无法做到这一点,除非没有大量艰苦的手动时区定义。

Python 不包含时区数据库,因为它会很快过时。相反,Python 依赖于可以具有更快发布周期的外部库来为您提供正确配置的时区。

作为副作用,这意味着时区解析也需要是一个外部库。如果 dateutil 对你来说太重了,使用 iso8601相反,它会很好地解析您的特定格式:

>>> import iso8601
>>> iso8601.parse_date('2012-11-01T04:16:13-04:00')
datetime.datetime(2012, 11, 1, 4, 16, 13, tzinfo=<FixedOffset '-04:00'>)

iso8601 高达 4KB 小。比较 python-dateutil 的 148KB。

从 Python 3.2 开始,Python 可以处理简单的基于偏移的时区,并且 %z 将解析 -hhmm+hhmm 时间戳中的时区偏移量。这意味着对于 ISO 8601 时间戳,您必须删除时区中的 ::

>>> from datetime import datetime
>>> iso_ts = '2012-11-01T04:16:13-04:00'
>>> datetime.strptime(''.join(iso_ts.rsplit(':', 1)), '%Y-%m-%dT%H:%M:%S%z')
datetime.datetime(2012, 11, 1, 4, 16, 13, tzinfo=datetime.timezone(datetime.timedelta(-1, 72000)))

Python issue 15873 中正在跟踪缺乏正确的 ISO 8601 解析。 .

关于python - python - 如何在没有dateutil的情况下将时区感知字符串转换为Python中的日期时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13182075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com