在之前介绍 Django 中文化的文章《Django 中文本地化汉化方法》中留下了一个小小 bug 导致了 Django 的时间比本地时间慢了整整8个小时。百度了一下发现有不少人也遇到了这样的问题,但是不知道哪里出了问题。
解决办法
想解决这个问题只要改一个设置就好了
# 打开项目的配置问卷 settings.py
TIME_ZONE = 'UTC'
# 改为:
TIME_ZONE = 'Asia/Shanghai'
Why?
我的理解是 Django 支持时区的概念之后,存入数据库的时间全部都是 UTC 时间
当我们设置 TIME_ZONE = 'UTC'
时我们获得时间是 UTC 标准时间。而读取数据的时由于设置的是 UTC 标准时间,所以不进行时区转化。咱们中国法定时间是 UTC + 8 所以 Django 的时间就和我们的不一致了
而当我们设置 TIME_ZONE = 'Asia/Shanghai'
(由于历史原因就是上海时间,感兴趣的自己搜索一下吧)时,Django 会储存转化后的 UTC 标准时间,而当我们读取数据的时候,根据设置将时间 +8 后呈现给我们。