请问django 中的USE_TZ设置为true有何影响?
settings的配置如下:
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = True
目前发现的问题是一个时间不准的问题:
有一个字段的定义如下:
created = models.DateTimeField(auto_now_add=True,
verbose_name=_('Created'))
打印出来为:datetime.datetime(2014, 2, 10, 8, 49, 23, tzinfo=
在页面显示的时候需要进行格式的调整,简单来说就是通过月份和日期判断,为当天则只显示时间,否则显示日期加时间。
测试过程中发现,显示的时间早了8个小时,原因是“tzinfo=
通过astimezone把时区调整了一下:
shanghai_tz=pytz.timezone("Asia/Shanghai")
order_sh_time = o_time.astimezone(shanghai_tz)
请问有人遇到类似的问题吗?
是否还存在其它的问题?多谢。
Django Time Zone这个文档值得好好读一下。
Django如果开启了Time Zone功能,则所有的存储和内部处理,甚至包括直接
print
显示全都是UTC的。只有通过模板进行表单输入/渲染输出的时候,才会执行UTC本地时间的转换。所以我建议后台处理时间的时候,最好完全使用UTC,不要考虑本地时间的存在。而显示时间的时候,也避免手动转换,尽量使用Django模板系统代劳。
这个需求,我可能会把复杂的东西提前——在输出之前先判断是否最近创建,并把这个结果直接写入记录对象,传递给模板系统:
然后在模板里只放简单的逻辑判断:
Time Zone是Django里边很有趣、也很有用的一个功能。我的树莓守望者项目中,UTC(或其他时区)与北京时间的协调,就深深受惠于这一点——项目中涉及时区变化的部分,全部由Django接管,再也不需要任何的说明或假设。
所以我的建议是:别怕麻烦,请在任何项目中都开启Time Zone,熟练了就没有坏处,并可能带来未来的收益。