那些我一直搞不懂的时间概念

592 阅读4分钟

GMT和UTC经常看到,也经常用,但是我总是没办法完全搞清楚二者的关系。UTC是目前的时间时标准,开发过程中建议使用UTC时间。使用new Date().toString()打印出来的时间格式又是GMT?黑人问号脸。直接来个大梳理吧。

前置知识

周日视运动

由于地球每天自西向东自转一周,造成了日月星辰每天早上从东方升起,晚上又从西方落下的自然现象。因为这种现象是地球自转造成的人的视觉效果,所以天文学上把太阳等天体的这种运动叫做周日视运动。

真太阳时(Apparent Solar Time)

以太阳的周日视运动为依据,日晷所表示的时间就是真太阳时。

平太阳时(Mean Solar Time)

以太阳的周日视运动的平均速度为基础测得的时间为依据,钟表所表示的时间就是平太阳时。(简单理解:一年里真太阳时的平均就是平太阳时)

真太阳时 VS 平太阳时

实际太阳运行的视速不均匀,太阳距地球近时运行速度快,距地球远时运行速度慢,真太阳时比平太阳时提前或滞后几分钟至十几分钟,最多为16分24秒。


GMT(格林威治平时,Greenwich Mean Time)

格林尼治天文台所在地的平太阳时。

UT(世界时,Universal Time)

由于1925年以前人们在天文观测中,常常把每天的起始(0时)定为正午,而不是通常民用的午夜,给格林尼治平时的意义造成含糊,人们使用世界时一词来明确表示每天从午夜开始的格林尼治平时。

UT0: 由一个天文台的天文观测直接测定的世界时,没有考虑极移(简单理解就是,极移使地面上各点的纬度、经度和方位角都发生变化)造成的天文台地理坐标变化。因此测出的世界时不准确,现在已经不再被使用。

UT1: 在UT0的基础上加入了极移改正,修正地轴摆动的影响。UT1是目前使用的世界时标准。

UT2: 在UT1基础上加入了地球自转速率的季节性改正。

TAI(国际原子时,International Atomic Time)

为了彻底解决定义的时间流逝不均匀的问题,开始使用原子钟(高精度计时装置)定义时间。

UTC(协调世界时,Coordinated Universal Time)

基于国际原子时,并通过不规则的加入闰秒来抵消地球自转变慢的影响。闰秒在必要的时候会被插入到UTC中,以保证UTC与UT1相差不超过0.9秒。是目前全世界使用的时间标准。

GMT在民用领域常常被认为与UTC相同。对于大多数用途来说,UTC时间被认为能与GMT时间互换,但GMT时间已不再被科学界所确定。

DST(夏令时,Daylight Saving Time)

一种在夏季月份牺牲正常的日出时间,而将时间调快的做法。各个采纳夏时制的国家具体规定不同。目前全世界有近110个国家每年要实行夏令时。 自2011年3月27日开始俄罗斯永久使用夏令时,把时间拨快一小时,不再调回。

比如法国采取夏令时(UTC+1 → UTC+2):

  • 夏令时开始于每年3月的最后一个周日凌晨,人们需要将时间调早 (顺时针) 1个小时,这一天只有23小时;
  • 夏令时结束于每年10月的最后一个周日凌晨,人们需要将时间调晚 (逆时针) 1个小时,这一天则有25小时。 2021年开始于3月28日2:00,结束于10月31日2:00。

法国时间2021年3月27日8:00时,北京时间2021年3月27日15:00。

法国时间2021年3月28日8:00时,北京时间2021年3月28日14:00。

上海也曾经实行过夏令时(UTC+9):

image.png

为什么要采取夏令时?

Daylight Saving Time Explained,这个视频讲解说明的挺明白的。

注意,不要混淆时区和偏移量,时区设置需要指定与UTC的偏移量以及是否要遵守 DST。

一般情况下无需担心,moment-timezone会自动区分夏令时。