遇到的问题:程序可以正常运行但是控制台打印出了异常,作为有强迫症的人来说,报红就是眼中钉肉中刺,于是挣扎一番,终于找到。
原因:Django如果开启了Time Zone功能,则所有的存储和内部处理,甚至包括直接print显示全都是UTC的。只有通过模板进行表单输入/渲染输出的时候,才会执行UTC本地时间的转换。所以我建议后台处理时间的时候,最好完全使用UTC,不要考虑本地时间的存在。而显示时间的时候,也避免手动转换,尽量使用Django模板系统代劳。
解决办法
第一种:修改settings中的配置项
- 找到settings中的USE_TZ= True,把True改成False即可
第二种:如果USE_TZ= True,则需这样获取当前时间
- 存储到数据库中的是UTC时间
- 在函数直接传递时间参数时,确保时间已经转换成UTC时间