python时区 timezone相关记录

Django Time Zone这个文档值得好好读一下。

Django如果开启了Time Zone功能,则所有的存储和内部处理,甚至包括直接print显示全都是UTC的。只有通过模板进行表单输入/渲染输出的时候,才会执行UTC本地时间的转换。

所以我建议后台处理时间的时候,最好完全使用UTC,不要考虑本地时间的存在。而显示时间的时候,也避免手动转换,尽量使用Django模板系统代劳。

这个需求,我可能会把复杂的东西提前——在输出之前先判断是否最近创建,并把这个结果直接写入记录对象,传递给模板系统:

    from django.utils.timezone import utc
    now = datetime.datetime.utcnow().replace(tzinfo=utc)
    timediff = now - object1.created
    object1.just_created = True if timediff.days < 1 else False

然后在模板里只放简单的逻辑判断:

{% if object1.just_created %}
{{ object1.created|date:"H:i:s" }}
{% else %}
{{ object1.created|date:"Y-m-d H:i:s" }}
{% endif %}
<!-- 不做分支预测的受害者,最好把命中频繁的分支放在前边? -->

Time Zone是Django里边很有趣、也很有用的一个功能。我的树莓守望者项目中,UTC(或其他时区)与北京时间的协调,就深深受惠于这一点——项目中涉及时区变化的部分,全部由Django接管,再也不需要任何的说明或假设。

所以我的建议是:别怕麻烦,请在任何项目中都开启Time Zone,熟练了就没有坏处,并可能带来未来的收益。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值