素材牛VIP会员
为什么系统的时区是东八,但是存数据还是存的标准时?
 不***)  分类:SQL代码  人气:931  回帖:5  发布于6年前 收藏

通过DjangoAPI来存:

pythonfrom django.db import models


class Chirp(models.Model):
    content = models.TextField()
    pub_time = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.content[:20]+ '...'

template中:

html{% for chirp in chirp_page %}
        <div class="chirp_item">
            <span class="timestamp">
                {{ chirp.pub_time.hour }}:{{ chirp.pub_time.minute }},
                {{ chirp.pub_time.day }}-{{ chirp.pub_time.month }}-{{ chirp.pub_time.year }}
                &nbsp;说:{{ chirp.pub_time }}
            </span>
            <p class="chirp">{{ chirp.content }}</p>
        </div>
    {% endfor %}

显示效果示例:

因为我在Django项目里面也设置了时区,所以后面那个时间能正确显示(是这个原因吧。。。),但是通过属性来取的时候就跟数据库里一样了,看下面的图。

数据库中(注意time_zone):

系统的时区:

讨论这个帖子(5)垃圾回帖将一律封号处理……

Lv2 入门
踏***C UI设计师 6年前#1

考虑这样一个问题,你的用户来自世界各地,如果你的时间存储的是带某个时区的时间,那么另外不同时区的用户访问你的页面,你怎么把它转化为用户本地的时间来显示?
所以服务器上存储的都是UTC时间。在用户访问页面的时候,浏览器把UTC时间转换为当地的时间。在Flask中有moment这样一个扩展专门做这个工作,我没有仔细看你的代码,不过我相信同为python web框架,原理都是一样的。

Lv4 码徒
13***64 软件测试工程师 6年前#2

因为你只有两种选择:

  1. 要么所有时间都存成带时区的
  2. 要么所有时间都存成同一个时区的

第一项会造成很多不必要的存储和麻烦(不能直接比较和计算),所以大家都用第二项。而用什么时区呢?根据定义,UTC 最靠谱。别的时区由于各种各样的原因名称、适用地域和与UTC的偏移都会变化。

Lv3 码奴
gu***di 软件测试工程师 6年前#3

"时区"完全是一个显示概念,“UI”概念;
时间的存储本不应该跟”时区“扯上关系;
建议直接存毫秒数

Lv2 入门
12***om JAVA开发工程师 6年前#4

因为这是最好的作法。
这要做的好处有:

  1. 万一你想要个功能,可以根据客户的地理位置显示不同时间?
  2. 默认所有的时间都是 UTC 时间,这样,不管对接什么系统,都不用再加一个时区信息了。大家都知道这个是 UTC 的,然后根据需求转换。
Lv3 码奴
逆***动 PHP开发工程师 6年前#5

数据库存的是UTC时间, 如果设置了时区, 显示的时候就根据相应的规则进行转换

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取