计算机世界中的时间

时间永远不够用。

长久以来,编程中遇到的时间概念,让我很迷惑。故而特定整理成此篇博文——浅析计算机世界中的时间。

时间单位

时间的单位可以为second、millisecond、microsecond、nanosecond,相互之间的关系如下:

1
2
3
static const int64_t MillisecsPerSec = INT64_C(1000);
static const int64_t MicrosecsPerSec = INT64_C(1000000);
static const int64_t NanosecsPerSec = INT64_C(1000000000);

时间的标准

IAT

IAT,International Atomic Time,原子时,又称国际原子时,是一种通过原子钟得到的时间标准,原子钟是世界上已知最准确的时间测量和频率标准,原子钟在 37 亿年的误差不超过 1 秒。

原子时计量的基本单位是原子时秒,由原子钟导出定义为:在零磁场下,铯-133原子基态两个超精细能级间跃迁辐射9,192,631,770周所持续的时间。

UT

UT,Universal Time,世界时,是一种以格林尼治子夜起算的平太阳时。世界时是以地球自转为基准得到的时间尺度,其精度受到地球自转不均匀变化和极移的影响,为了解决这种影响,1955年国际天文联合会定义了UT0、UT1和UT2三个系统。

UTC

UTC Time,Coordinated Universal Time,协调世界时或世界标准时间。协调世界时是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。国际原子时的误差为每日数纳秒,世界时的误差为每日数毫秒,UTC 便是这两种时标的一种折中。

UTC Time被广泛应用于互联网标准中,NTP(网络时间协议)就是协调世界时在互联网中使用的一种方式。在计算机的世界中,UTC TimeGMT(Greenwich Mean Time,格林尼治平均时间)是相等的,都与英国伦敦的本地时间相同。

GMT

GMT,Greenwich Mean Time,格林尼治标准时间,指位于伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。 格林尼治时间已经不再被作为标准时间使用。现在的标准时间(UTC)由原子钟提供。

DST

DST,Daylight Saving Time,夏令时与冬令时。又称“日光节约时制”和“夏令时间”,是一种为节约能源而人为规定地方时间的制度,在这一制度实行期间所采用的统一时间称为“夏令时间”。一般在天亮早的夏季人为将时间提前一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。使用夏令时和冬令时即在夏季将时间拨快一个小时,等到冬季再将时间拨慢一个小时。

时间的表示

NTP Time

NTP Time,是以Network Time Protocol协议为基础的时间表示,也可以称为NTP TimestampWallClock Time。其值为从1900-01-01 00:00:00 UTC开始所经过的秒数。

NTP使用64比特的时间戳,其中32位表示秒,32位表示秒的小数,给出一个每2^32秒(136年)才会翻转的时间尺度,理论分辨率2^−32秒(233皮秒)。NTP以1900年1月1日作为开始时间,因此第一次翻转将在2036年2月7日发生。

Epoch Time

Epoch Time,新纪元时间,其中,Epoch指的是一个特定的UTC Time:1970-01-01 00:00:00 UTC。

Unix/Linux的时间系统(Unix Time/POSIX Time/Unix TimeStamp)就是从Epoch开始计算的——是从Epoch开始所经过的秒数,不考虑闰秒。

32位的Epoch Time只能表示的时间领域为[1901~2038],也就是当时间超过2038-01-18 22:14:07,时间会转为负数,负数意味着时间跑到1970年之前去了。

64位的Epoch Time并不会遇到这个问题,所以当2038年来临,要么升级到64位系统,要么穿越到1970年之前吧。

WallClock Time

WallClock Time为绝对日期和时间,使用NTP时间戳格式来表示,其值为从1900-01-01 00:00:00 UTC开始所经过的秒数。

NTP时间戳是64位无符号浮点数,其中高32位为整数部分,低32位为小数部分。与32位Epoch Time类似,NTP时间戳在2036年会变成零。


本文作者:ZeroJiu
本文链接: http://www.freehacker.cn/utility/time/
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!