摘要:本文总结几类项目中跟时区相关的问题,给大家分享一些基本的时区知识,以及如何在软件开发和测试中注意考虑时区因素,以避免因时区而导致系统功能的问题。
场景一
“小D,我发现调整不同的timezone(时区),咱们的KPI计算结果可能会有一天的误差…”
“啊!我看看什么原因。”
“嗯啦,KPI务必是准确的,可不能有误差…”
“小Q,我知道啦!咱们的工单任务完成时间记录的是UTC时间,是考虑了timezone转换的,但是缺失信息的记录并没有考虑… ”
“为什么缺失信息不记录UTC时间呢?”
“因为缺失信息只记录日期,并没有时间。”
蓝鲸项目的小Q和小D说的是啥呢?下面先来借助维基百科的解释来介绍时区和UTC的概念:
- 时区(timezone) 时区是地球上的区域使用同一个时间的定义。以前,人们通过观察太阳的位置决定时间,这就使得不同的地方的时间有所不同(地方时)。1863年,首次使用时区的概念,通过设立一个区域的标准时间部分地解决了这个问题。
- UTC 协调世界时(英语:Coordinated Universal Time,法语:Temps Universel Coordonné,简称UTC)是世界上调节时钟和时间的主要时间标准,它与0度经线的平太阳时相差不超过1秒。协调世界时是最接近格林威治标准时间(GMT)的几个替代时间系统之一。对于大多数用途来说,UTC时间被认为能与GMT时间互换,但GMT时间已不再被科学界所确定。
原来小Q和小D所在的蓝鲸项目正在开发一个全球性的系统,用户处于世界各地的不同时区。
系统的工单处理流程中每个任务的完成因为有先后依赖关系,当时记录的是完成时刻的UTC时间,以防不同时区的用户完成依赖任务的时候产生冲突。
比如:处于UTC+0800时区的用户S在当地时间2019-02-28 09:30处理了任务1,系统记录的时间是UTC 2019-02-28 01:30,接下来处于UTC-0800的用户G在当地时间2019-02-27 18:20来处理任务2(必须晚于任务1