关于python:received-a-naive-datetime-while-time-zone-support-is-active

15次阅读

共计 781 个字符,预计需要花费 2 分钟才能阅读完成。

python datime 的坑 —— received a naive datetime while time zone support is active

在你应用 Django 插入一些工夫类型的数据的时候,很可能会遇下面的谬误,为什么呢?

from datetime import datetime

print(datetime.utcnow())

因为具备迷惑性的 utcnow 的输入并不携带时区信息,而在 Django 会对 datetime 类型的数据做时区校验。

如何获取带 utc 时区信息的 utcnow 呢?

换个问法能够这样问:
如果让 python datetime 类型带上时区信息,比方 utc 时区信息

须要应用上面的代码

datetime.utcnow().replace(tzinfo=timezone.utc)

来看看输入的差别:

from datetime import datetime, timezone

a = datetime.utcnow()
print(a, type(a))

a = datetime.utcnow().replace(tzinfo=timezone.utc)
print(a, type(a))

输入为:

2021-11-01 05:18:11.165279 <class 'datetime.datetime'>
2021-11-01 05:18:11.165811+00:00 <class 'datetime.datetime'>

看到前面的 +00:00 了吗?这个示意的就是时区信息。

这个 timeinfo 信息是保留在 datetime 类中的

@property
def tzinfo(self):
    """timezone info object"""
    return self._tzinfo

如果你正在应用 python 解决一些时区相干的内容,能够看看上面的内容:
写代码时罕用到的 time helper 工具
mac mysql 批改默认时区为 utc

正文完
 0