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

请教一下 datetime 的问题

  •  
  •   coolair · 2018-08-23 13:40:01 +08:00 · 1289 次点击
    这是一个创建于 2065 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我的数据库中存的 datetime 是 utc 时间,字段类型是 datetime。
    现在的问题是:
    前端展示时间的时候,应该显示本地时间,所以就需要 utc 转成 local 时间。
    但是在表单提交的时候,表单中选中的时间是本地时间,提交前需要转成 utc 时间。
    是不是都是要这样转来转去?有更好的方法吗?
    13 条回复    2018-08-23 15:35:44 +08:00
    Vhc001
        1
    Vhc001  
       2018-08-23 13:44:10 +08:00
    是不是都是要这样转来转去?是的
    有更好的方法吗?时间戳了解下
    aaronlam
        2
    aaronlam  
       2018-08-23 13:46:02 +08:00
    一般都存时间戳
    coolair
        3
    coolair  
    OP
       2018-08-23 14:02:04 +08:00
    @Vhc001 #1
    @aaronlam #2
    存时间戳的话,如果存的是 utc 时间的时间戳,那不是也要转吗?
    Vhc001
        4
    Vhc001  
       2018-08-23 14:11:24 +08:00
    @coolair #3 时间戳不存在时区的概念。
    ssynhtn
        5
    ssynhtn  
       2018-08-23 14:11:36 +08:00
    @coolair 时间戳是不管时区的, 时间戳+时区=>显示的日期和时间
    不过俺们公司都是存 datetime 的, 我想存 timestamp 还被强制改回来呢
    KeatingSmith
        6
    KeatingSmith  
       2018-08-23 14:14:13 +08:00
    可以使用 pytz 库,这是地址: http://pytz.sourceforge.net/
    leafiy
        7
    leafiy  
       2018-08-23 14:40:50 +08:00 via Android
    我司产品都是国际用户,时间时区确实研究了很久
    如果同时面对 2 个时区的用户,真没觉得时间戳能解决问题,最终还是采用了 utc 时间
    后来直接在数据库加一层,取数据时自动转成多个时区,前端想用哪个就用,不用转
    coolair
        8
    coolair  
    OP
       2018-08-23 14:45:48 +08:00
    @leafiy #7 你的意思是取数据时转成了多个时区的数据全部丢给前端?
    rrfeng
        9
    rrfeng  
       2018-08-23 14:45:50 +08:00
    @leafiy
    utc 时间 = 北京时间 = xxx 时间 = 时间戳
    只是显示的字符串不一样而已,凭什么 utc 能解决时间戳解决不了的问题?
    leafiy
        10
    leafiy  
       2018-08-23 15:28:25 +08:00 via Android
    @rrfeng 我没说清楚,我们最开始用的 utc,因为要在前端展示不同时区,每个用户用户也有自己的时区设置,转来转去很麻烦,后来改用了时间戳根据用户设置转,可还是需要转啊,再后来直接加了个中间层直接把所有需要的时间格式全部一起生成了,再也不用转时间了,存 utc 还是时间戳都不用再考虑了
    leafiy
        11
    leafiy  
       2018-08-23 15:30:55 +08:00 via Android
    @coolair yes,现在用的 mogoose 的 virtual 方法,直接吐出诸如 created:{us:xxx,zh_cn:xxx}
    aaronlam
        12
    aaronlam  
       2018-08-23 15:34:42 +08:00
    @coolair

    时间不区分时区的,虽然拿到时间戳也是要转,但是各地的时间戳都是一样的,所以处理起来也直观
    ![img]( https://www.linuxidc.com/upload/2016_01/160119095040111.jpg)
    aaronlam
        13
    aaronlam  
       2018-08-23 15:35:44 +08:00
    @aaronlam

    时间不区分时区的->时间戳不区分时区的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5703 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 06:27 · PVG 14:27 · LAX 23:27 · JFK 02:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.