服务器时区应当设置成UTC时间吗
先理清时间与时区的基础概念:
时间的存储值(UTC long) + 时区 -->转换成--> 时间的表现值(local string)
同时纠正一个经常有人犯的错误,把这个值用来交换: 时间的存储值(UTC long) + 时区 = 时间的本地值(local long)
传输与存储时间值的时候local long是一个不应该存在的概念,一个引起混乱的罪魁,此点切记!
在交换时间数据的时候,如果时区不重要或者相同,那么交换时间的存储值还是交换时间的表现值是等效的,如果双方对时区敏感(需要展现不同时区的表现值),那么引起混乱的原因通常是直接交换时间的表现值(local string)或者时间的存储值,却不交换时区值。
实例1:
比如两个国家的App提交日志,如果其时区并不重要,那么提交时间在程序运维者时区的表现值(string),是一个比较简洁方便的方案。而如果其时区很重要,那么如果不提交时区值,不论是只提交时间的存储值(UTC long),还是只提交任何一个时区的表现值(string),都是没有办法完美实现我们的需求的,简单的讲,如果出现混乱或者矛盾,那么就不要纠结传啥值啦,简单的加上时区字段就可以了。
实例2:
服务器时区的设置不影响服务器时间存储值,只影响时间的表现值。十台设置成不同时区的服务器,你的程序取到的时间存储值都是相等的,如果不等,那么抱歉,你用错函数了!对于服务多个国家的服务器,你把时区设置成任何一个国家的时区都会造成某些人的纠结,但这并没有什么关系,重要的是,你不要把应该保存成时间+时区两个字段的值只保存成一个字段,引起问题的是数据的降纬,而不是服务器时区设置造成的。作为时间表现值的服务器时区设置,应当设置成服务器运维者所在的时区,而非服务器所服务的用户的众多国家中的任何一个,同理也不应当是UTC。(你有两个孩子,要分两个梨,一个大一个小争执不下,难道你会将两个梨子都给旁边看热闹的小孩--UTC来解决这个问题么?)