call-datetime-strptime-without-zone (DTZ007) (调用不带时区的 datetime.strptime)
派生自 flake8-datetimez 代码检查器。
作用
检查 datetime.datetime.strptime()
的使用,这些使用会导致创建 naive (不含时区信息) 的 datetime 对象。
为什么这不好?
Python datetime 对象可以是 naive (不含时区信息) 的或 timezone-aware (含时区信息) 的。 虽然 aware 对象表示时间中的特定时刻,但 naive 对象不包含足够的信息来明确地将自身定位到相对于其他 datetime 对象的位置。 由于这可能导致错误,因此建议始终使用 timezone-aware 对象。
不带 %z
的 datetime.datetime.strptime()
返回一个 naive datetime 对象。 紧随其后使用 .replace(tzinfo=<timezone>)
或 .astimezone()
。
示例
改为使用 .replace(tzinfo=<timezone>)
import datetime
datetime.datetime.strptime("2022/01/31", "%Y/%m/%d").replace(
tzinfo=datetime.timezone.utc
)
或者,使用 .astimezone()
import datetime
datetime.datetime.strptime("2022/01/31", "%Y/%m/%d").astimezone(datetime.timezone.utc)
在 Python 3.11 及更高版本中,datetime.timezone.utc
可以替换为 datetime.UTC
。