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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。