最近开发一个跨境电商系统,数据同步后出现不一致的情况,报表也变得没法看,究其原因是记录的时间在外部和内部系统都采用了本地时区,而这两个时区又不一样导致的。
我们一般在开发的时候使用的都是本地实现,即UTC+8东八区的时间,咱们国土面积虽大,但是没有跨时区,所以默认情况下不去管时区也没啥问题。
但当你开发的软件面对的是国外客户,或者说是全球客户时,就不得不面对时区的问题。
UTC - 协调世界时,英文 Coordinated Universal Time , 也叫世界统一时间,每年格林尼治天文台会发调时信息。
GMT - 格林威治标准时间,英文 Greenwich Mean Time, 指位于伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。
TAI - 国际原子时,英文 International Atomic Time, 以原子秒为单位,更加精确。
UTC和GMT可视为无差别,UTC是以原子时计时,更加精准,一般使用不需要精确到秒时,视为等同。UTC本身又衍生自国际原子时。
由于不同时区的用户看到的时间是不一样的,系统内可以记录UTC时间,就是UTC+0的时间,在展示给不同时区的用户时经过计算向其展示本地时间。很多开源系统在记录用户时间的时候都记录了UTC时间,比如WordPress。
1982年1月1日,国际电讯联盟(UIT)决定以UTC(协调世界时间)取代GMT,以修正由于地球在轴心上自转,故全年每天时长并不一样的世界时间。按国际惯例,UTC等同GMT,但它们的量度时间的方式不同∶ GMT从中午起量度,而UTC则由午夜起量度。UTC是法律上依据的世界时间。