为什么系统的时区是东八,但是存数据还是存的标准时?
通过Django
的API
来存:
python
from 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 }}
说:{{ chirp.pub_time }}
</span>
<p class="chirp">{{ chirp.content }}</p>
</div>
{% endfor %}
显示效果示例:
因为我在Django项目里面也设置了时区,所以后面那个时间能正确显示(是这个原因吧。。。),但是通过属性来取的时候就跟数据库里一样了,看下面的图。
数据库中(注意time_zone
):
系统的时区:
回答:
因为你只有两种选择:
- 要么所有时间都存成带时区的
- 要么所有时间都存成同一个时区的
第一项会造成很多不必要的存储和麻烦(不能直接比较和计算),所以大家都用第二项。而用什么时区呢?根据定义,UTC 最靠谱。别的时区由于各种各样的原因名称、适用地域和与UTC的偏移都会变化。
回答:
数据库存的是UTC时间, 如果设置了时区, 显示的时候就根据相应的规则进行转换
回答:
因为这是最好的作法。
这要做的好处有:
- 万一你想要个功能,可以根据客户的地理位置显示不同时间?
- 默认所有的时间都是 UTC 时间,这样,不管对接什么系统,都不用再加一个时区信息了。大家都知道这个是 UTC 的,然后根据需求转换。
回答:
"时区"完全是一个显示概念,“UI”概念;
时间的存储本不应该跟”时区“扯上关系;
建议直接存毫秒数
回答:
考虑这样一个问题,你的用户来自世界各地,如果你的时间存储的是带某个时区的时间,那么另外不同时区的用户访问你的页面,你怎么把它转化为用户本地的时间来显示?
所以服务器上存储的都是UTC时间。在用户访问页面的时候,浏览器把UTC时间转换为当地的时间。在Flask中有moment这样一个扩展专门做这个工作,我没有仔细看你的代码,不过我相信同为python web框架,原理都是一样的。
以上是 为什么系统的时区是东八,但是存数据还是存的标准时? 的全部内容, 来源链接: utcz.com/a/165421.html