V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
coolair
V2EX  ›  问与答

请教一个 Django 时区设置问题

  •  
  •   coolair · 2017-08-02 17:47:46 +08:00 · 1188 次点击
    这是一个创建于 2696 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在 settings 里设置了 TIME_ZONE = 'Asia/Shanghai'和 USE_TZ = True。
    假设当前 Asia/Shanghai 时间为 5:30 pm,这样如果有个在+05:00 的管理员(那儿的时间是 2:30 pm ),添加了一片文章,这个时候他在表单里选择的发布时间是 2:30 pm,数据库里保存的时间是 UTC 时间,也就是 2:30 pm 减 8 小时( TIME_ZONE = 'Asia/Shanghai',所以减了 8,按道理应该减 5 才对)。
    回过头来 Shanghai 的用户看到的这篇文章的发布时间是 2:30 pm,不是 5:30 pm。这样不就不准了么?
    6 条回复    2017-08-02 18:23:35 +08:00
    robinlovemaggie
        1
    robinlovemaggie  
       2017-08-02 17:50:08 +08:00
    哥们儿,你知道什么叫服务器时间吗?
    coolair
        2
    coolair  
    OP
       2017-08-02 17:52:41 +08:00
    @robinlovemaggie 这跟服务器时间有什么关系,这个时间是手选的,又不是用的系统时间,用系统时间的话,我用 timezone.now()就可以了。
    cxbig
        3
    cxbig  
       2017-08-02 17:55:16 +08:00
    所有服务器、数据库和项目都基于 UTC,只在前端显示的时候折算成时区时间。
    写入和输出的流程你都要排查一下。
    chenqh
        4
    chenqh  
       2017-08-02 17:57:46 +08:00 via iPhone
    可以数据库直接存上海时间呀
    mansur
        5
    mansur  
       2017-08-02 17:59:16 +08:00
    建议涉及到时间的一概存时间戳
    pktangyue
        6
    pktangyue  
       2017-08-02 18:23:35 +08:00
    已我的经验,如果设置了 USE_TZ = True, 那么就不要在使用标准库里面的 datetime,转而使用 from django.utils import timezone 里面的方法,这里面会保证所有的 datetime 都是 aware 的,就不太容易出问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1333 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 23:50 · PVG 07:50 · LAX 15:50 · JFK 18:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.