今天一位同事问道:“你写入ES的时间字段是考虑过时区处理了的吗?”
原来是我们有一个可能部署在全球各地的软件系统,这个系统会记录各种服务监控指标存入ES(一种数据存档索引系统)。今日那位同事发现他获取的是北京时间,而存入ES系统后却比北京时间晚了8个小时。
位于美国的系统面向美国用户,时间肯定是以美国当地为准,北京的同理。但如果最终将数据规整到一个系统中时,计时不统一将会导致数据几乎不可用,因为无法界定各个事件发生的先后顺序。
当然要解决这个问题很简单,不论是美国还是中国的系统,存储记录时均以国际标准时为准就可以了。可这件事却引起了我对时间、计时法、计时器的兴趣,于是有了本文。
到底该用UTC+8还是用GMT+8?
简短的回答是:对一般人来说没什么区别。虽然这两种时间有差异,但差异很小。
如果你不是一般人,想寻根究底,请往下看。那么它们到之间以及与其他你可能听过的计时有什么区别呢?为什么要闰秒呢?为什么一天要划分为24小时而非25小时?为什么一小时划分为60分而不是100分?
下面我们进行深入探讨,计时方式依据时间而来,那么首要弄明白的问题就是什么是时间,为什么要计时。
什么是时间
长久以来,时间一直是宗教、哲学及科学领域的研究主题之一。但各领域学者还没有找到一个适用于所有领域、具有一致性、没有争议的定义。争议比较小的定义有:“时间是时钟量测的物理量。”以及“时间使得所有事情不会同时发生。”(What the fuck?! 你没看错,没有同时发生的事。因为这样的定义下,时间是连续不可分割的,其精度无限高,故而事情发生的时间总会在某个精度下没有重合。还有人认为时间是不连续的,后文再谈时间的量子化。)
对于时间的存在性也有两种派别,一种以牛顿为代表的认为时间是宇宙的基本结构,是一个会依序列方式出现的维度。另一派以莱布尼茨和康德为代表的认为时间不是任何一种已存在的维度,只是一种心智的概念,是人类为了便于思考宇宙,对事件先后排序比较的人为规定。
计时
日出而作日入而息,这是更古以来人类以及各类动物作息的基本标准。这是进化历程中对时间自然而然地感知。人们观察到天亮是因为太阳会从空中划过,天黑是因为太阳落山了,“一天”的概念就形成了。
如何精确地测定一天
的长度就成了最主要问题,进而要确定四季变化,再到制定历法。因为最直观的就是太阳、月亮以及一些恒星在天空中周期性地变化,日、月、年
长度的基本参照物就有了。所以制定历法,在全世界都是最早推动天文学发展的主要因素。
以此,用太阳照射物体的影子来测量时间自然被人类想到了,所以发明了日晷、圭表等,不仅能测天,还能测季节。后来为了满足阴天、夜晚、室内的计时需求,水钟、沙漏等被发明出来。
GMT
GMT(Greenwich Mean Time)译作格林威治标准时间或格林威治平均时间。是由英国伦敦皇家格林威治天文台发布的标准时间。民用GMT自1847年起就在大不列颠岛使用。1884年,在华盛顿召开了国际子午线会议,格林威治当地平太阳时被指定为通用日,以午夜零时作为当天的起点。从1924年2月5日开始每隔一小时向全世界报时。被世界广泛采用。
GMT时间是如何测量的呢?是观察真太阳前后两次经过格林威治当地正上空为周期,即一天。这也是为什么经过格林威治的经线,规定为0度经线、本初子午线的原因。但因为地球绕太阳公转轨道不是正圆且公转速度不匀速等影响,如此测出来的每天的长短不一,格林威治天文台连续观测365个长短不一的天,然后求平均值得到一天的长度,称为平太阳日,每一天以格林威治子夜算起。然后再把天划分为时分秒。这种方法和天文学上假想一个太阳(假太阳,亦称平太阳)在天球赤道上匀速运行的观测结果是一致的。
这种方法测出来的基本单位是天。至于为什么一天要划分为24小时,每小时划分为60分钟,每分钟为60秒,后文再谈。平太阳日规定了每天正好86400秒。只测真太阳的话,每天长度不固定,这会给很多需要精确计时的领域带来困扰,是引入平太阳时的原因。
时区
国际统一的计时标准有了,但为了解决“18:00点整A地区太阳快落山”而“18:00点整B地区太阳还没出来”的反人类直觉的尴尬现象,为了让大家都能统一地有“凌晨5点太阳就要出来了”的认知,引入了时区的概念。
理论时区以被15整除的子午线(经线)为中心,向东西两侧延伸7.5度,即每15°划分一个时区,全球被划分为24个时区,这是理论时区。但因为国界线并不规则的原因,所以实际划分的时区并不规则。格林威治所在时区为0时区。
0度经线(经过格林威治)和180度经线所形成的圆环将地球划分为东西半球。从英国格林威治开始经过亚欧大陆至澳洲再至大约太平洋中间的位置为东半球,在这个方向上,每经过一个时区时间则在0时区的基础上则加 1 作为当地时间。从格林威治经过大西洋,至南美洲再至北美洲这边为西半球,这个方向上每经过一个时区,当地时间就是在0时区基础上减 1 。
北京位于东八区,所以北京时间是GMT+8的来由于此。而我们还听说的UTC时间、UT时间、TAI时间、GPS时间等等,都是因为计时方法、计时工具、计时精度的不同而衍生出来的。它们能够代替GMT时间,但因为GMT历史影响深远,保留了这个称呼。而且以格林威治所在时区为0时区也保留了下来。
UT
1928年,国际天文联合会引入了世界时(UT,Universal Time)的概念来指代GMT。随着科学技术的发达,观测方式越来越多,并不一定非要根据太阳来观察,也可以是一些宇宙射线。发现GMT测算是有偏差的。所以,1955年国际天文联合会又定义了UT0、UT1和UT2三个系统。
UT0系统是由天文观测的世界时,未经任何修正,即与GMT一致。后来天文学家发现在不同地点使用相同的方法观测结果仍不一致,这是由于地轴摆动引起的,UT1就修正了这种影响。后来又发现UT1具有周期性的变化,这种变化和地球自转速率的季节性变动有关,又在UT1的基础上修正了这种地轴摆动影响称为UT2。总结:GMT = UT0 精度小于 UT1 精度小于 UT2。(参考资料)
如今我们称呼的GMT时,实际上是UT时。
TAI
国际原子时(International Atomic Time,TAI)1967年的第13届国际度量衡会议上通过了一项决议,采纳以下定义代替秒的天文定义: 一秒为铯-133原子基态两个超精细能级间跃迁辐射9,192,631,770周所持续的时间。TAI被设定在1958年1月1日0:00:00与UT2相同。
现在TAI被国际度量衡局(BIPM)和国际地球自转和参考座标系统服务(IERS)管理,他们依据全球约60个实验室中约240台原子钟提供国际标准时间。
1955年,铯原子钟被发明出来,这种方式比天文观测更稳定,也证实了地球自转的不稳定性。铯原子钟使用铯的同位素铯-133来计时,因为铯-133是所有铯的同位素中最稳定的。至于为什么用铯,而不是其他元素,因为目前尝试过的元素中,铯-133的计时精度最高。在铯原子钟之前,还采用过最常见的氢元素。
1956年美国国家标准局和美国海军天文台开始研究基于原子频率的时间尺度。经过三年的观测与比较,发现不受外场干扰的铯-133原子基态的两个超精细结构能阶跃迁对应辐射的9,192,631,770个周期的持续时间和历书秒一致。
关于秒单位,英国科学促进协会在1862年表示“所有科学界的人都同意用平均太阳日计算的秒为时间单位。”,并于1874年正式提出厘米-克-秒制,分别为长度、重量、时间的基本单位。定义了秒为平均太阳日的1/86,400。
1956年秒被定义为以1900年历元(即历书时1900年1月1日正午12时)算起的回归年的31,556,925.9747分之一为一秒。此定义于1960年国际度量衡会议通过,即为历书秒。历元是指天文学变量作为参考的一些时刻点。
UTC
协调世界时(Coordinated Universal Time)是目前最主要的世界标准时间,以TAI时为基础,又尽量靠近UT1时。但在早期UTC旨在靠近更高精度的世界时UT2的。UT时依据地球自转而测得,但是地球自转在不断变慢,而且平时还会受潮汐力影响,这样秒就会变长,而UTC的参考基准是TAI,很稳定的。故而需要在某些时候给UTC加1秒或减1秒来保证UTC时与UT1时的差值在0.9秒以内,这就是闰秒。
PS: 如果你此时质疑了为何Coordinated Universal Time要缩写为UTC,证明你是个细心的人。
1960年,美国海军天文台、英国格林尼治皇家天文台以及英国国家物理实验室协调了它们的无线电广播,由此时间的步长和频率的变化得到了协调,这样产生的时间尺度也被正式命名为“协调世界时”。1961年,国际时间局开始在国际上协调不同的UTC时间。
有趣的是直到1967年国际天文学联合会才采用“协调世界时”这个命名,因为英语国家想坚持命名为CUT(Coordinated Universal Time)而法语国家想命名为TUC(Temps Universel Coordonné)。几番争执后相互妥协成了UTC。真是有趣,不仅时间是不同计时系统相互协调的结果,连命名也是协调的结果。
GPST
全球定位系统时(GPS Time),GPS由24颗卫星组成,可以向全球范围内提供定位、测速、高精度授时等功能。GPST是由星载原子钟和地面监控中心组成的一种原子时系统。起点是1980年1月6日0时,此时刻与UTC对齐。
虽然以TAI时为基础的UTC时与GPST时都是使用原子钟,但是还是有微小差异的。差异一来自组成各自计时系统原子钟的数量,TAI为全球范围的240多个,而GPST为20多个。差异二是GPST所用的原子钟在高速飞行的卫星上时间长度会发生变化,所以还需要使用《相对论》进行卫星时间修正。差异三在UTC为了和UT1保持较小的误差,还得跳秒。
下面是几种时间的直观对比(参考资料):
通过上图发现几种时间的差异之处。UTC与GMT看起来已经相差两秒,可能是网络原因导致的,实际上它们应该相差在1秒之内。大多数时候打开看应该是GMT慢了1秒。
国内的北斗导航系统也能提供授时服务,同样是卫星上载有原子钟。早期的北斗卫星采用瑞士进口原子钟,目前已经开始使用国产原子钟。截止2016年6月12日,已经发射23颗北斗卫星,其中21颗在进行服务。
24小时、60分钟的由来
为什么一年分为4季而非5季?分为12个月而非13个月?为什么平年是365天?为什么每隔4年是一个闰年?为什么闰年是366天?为什么每天分为24小时而非20小时?为什么每小时分为60分钟而不是100分钟?为什么每分钟分为60秒而不是70秒?
如果你跟我一样都疑惑过以上问题并且想知道答案的话,那继续往下看吧。本节估计是本文最有趣的一节了。
首先解决简单的问题。一年有365天是因为天文观测到比较精确地是每经过365.25个昼夜就是地球围绕太阳公转一年。而要隔4年就闰年的原因也来自于此。每4年的前3年并不会将那0.25天算上,不方便,所以第4年的时候就凑个整为366天。
为什么一年要分为四个季节呢?可能是对大自然比较粗略的感知,极冷和极热分别为冬夏两个季节,而这两个季节之间又有两个不冷不热的季节连接,故而有了春夏秋冬四个季节。也许还有其他地理方面的观察直接推动了将季节划分为4个。一年分为12个月也比较容易知道是为什么,观察一年里月球的运动即可得到12这个数值。
然而为何要将一天划分为24个小时?
埃及有出土约公元前1500多年的日晷,呈T型,置于地上将日出至日落划分为12份。为什么划分采用12这个数值的原因有几个。一是月球绕地球的转动周期。二是人类除了大拇指之外的关节数,方便数数。三是埃及人还观察到天上特定的36颗恒星可以将天空分为相等的部分,依此作为测量系统。天黑时可以依次看见18颗星星,但是黄昏和黎明时各占3颗星星不容易看见,天空纯黑的时候可以看到12颗。黑夜被划分为12份就有了,白天再同理划分为12份。也就有了24小时的雏形。
那么为什么每个小时被划分为60分钟呢?在很长的时期,是没有分钟这种划分的,因为没有普世而精确的工具。按60来划分大概是从希腊托勒密那代(公元前100年左右)开始,从古巴比伦传进来的。据说古巴比伦人是跟苏美人(约公元前3000~2000年)学的。
无独有偶,中国的天干地支计时法,大概出现于公元前一千多年,每天也被分为12个时辰,每个时辰被划分为两小部分。而天干地支的特定组合是60,比如用于天干地支纪年法,60年一甲子,一个轮回。
不论是从苏美人那里学的,还是相隔千万里的中华文明,为何都用12、60这些数值?有种说法是源于我们的手掌,一只手用大拇指数关节,就是12,另一只手用手指做进位,5个12就是60。
而且我们现在发现,用60真的太方便了。60的约数有1,2,3,4,5,6,10,12,15,20,30,我们可以很轻易地把60分钟划分为各种相等的组合。可以划分为2个30分钟,也可以划分为4个15分钟等等。
在写此文中,还阅读了一些我们老祖先发明的太极八卦相关的资料。无极生太极,太极生两仪,两仪生四象,四象生八卦。八卦又可以演绎为六十四卦。这实际就是一个二进制系统。然而天干地支这些和它结合在一起,2进制(及其衍生的八进制、十六进制)、10进制、60进制都有体现。很是了不得,以后再探究这点。
数,是人类认识宇宙的最基本最重要工具。谁对数的研究和认识走在人类前沿,那么那个文明也将走在世界最前沿。
你,心里有没有数?