服务器时区应该设置成UTC时间吗?

传输与存储的时间戳只应该是UTC时间、展示时间时必须指定时区,这个两个原则同等重要

遵守了这两个原则,就不会受系统时区设置的影响

 =========================================================

先理清时间与时区的基础概念:

 

时间的存储值(UTC long) + 时区   -->转换成--> 时间的表现值(local string)

 

同时纠正一个经常有人犯的错误,把这个值用来交换: 时间的存储值(UTC long) + 时区  =  时间的本地值(local long)

传输与存储时间值的时候local long是一个不应该存在的概念,一个引起混乱的罪魁,此点切记!

 

在交换时间数据的时候,如果时区不重要或者相同,那么交换时间的存储值还是交换时间的表现值是等效的,如果双方对时区敏感(需要展现不同时区的表现值),那么引起混乱的原因通常是直接交换时间的表现值(local string)或者时间的存储值,却不交换时区值。

 

实例1:

 

比如两个国家的App提交日志,如果其时区并不重要,那么提交时间在程序运维者时区的表现值(string),是一个比较简洁方便的方案。而如果其时区很重要,那么如果不提交时区值,不论是只提交时间的存储值(UTC long),还是只提交任何一个时区的表现值(string),都是没有办法完美实现我们的需求的,简单的讲,如果出现混乱或者矛盾,那么就不要纠结传啥值啦,简单的加上时区字段就可以了。

 

实例2:

 

服务器时区的设置不影响服务器时间存储值,只影响时间的表现值。对于服务多个国家的服务器,你把时区设置成任何一个国家的时区都会造成某些人的纠结,但这并没有什么关系,重要的是,你不要把应该保存成时间+时区两个字段的值只保存成一个字段,引起问题的是数据的降纬,而不是服务器时区设置造成的。作为时间表现值的服务器时区设置,应当设置成服务器运维者所在的时区,而非服务器所服务的用户的众多国家中的任何一个,同理也不应当是UTC。(你有两个孩子,要分两个梨,一个大一个小争执不下,难道你会将两个梨子都给旁边看热闹的小孩--UTC来解决这个问题么?)

 

猜你喜欢

转载自arksea.iteye.com/blog/2257401
今日推荐