计算机时间系统

首先注意的是,不同的时间系统关于秒长的定义是不一样的。

定义秒长:
  • 原子时 IAT(international atomic time)(即国际原子时):原子震荡,以精确的秒的定义为基础的时间        
  • 恒星时 ST(sidereal time):以恒星为基础的相对于原子时不十分精准的时间        
  • 太阳时 MT(mean solar time):地球自转,以太阳为基础的相对于原子时不十分精准的时间        
时间系统:
  • 林尼治标准时GMT 、世界时 UT(universal time):以本初子午线的平子夜起算的平太阳时        
  • 历书时 ET(Ephemeris time):地球公转        
  • 协调世界时 UTC:协调世界时是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。        
历史上使用的时间计量:
        最开始,以地球自转为基准的时间计量系统的世界时被全世界统一使用。我们用的北京时,是东经120o的平太阳时。由于地球自转速度不均匀,导致用其测得的时间不均匀。
        1960年起,人们开始以地球公转运动为基准来量度时间,用历书时系统代替世界时。历书时的秒长规定为1900年1月0日12时整回归年长度的1/31 556 925.974 7,起始历元定在1900年1月0日12时。随着科技的发展,历书时的精度已不能满足需要, 1967年后,历书时被原子时所取代。原子时的时间单位在目前来说是最精确的,但原子时不能确定时刻。为了得到既有准确时刻,又有精确秒长的时系,国际上规定了协调世界时。协调世界时的秒长与原子时秒长一致,在时刻上尽量与世界时接近(其差值在全0.9秒以内)。

历法:
        不管有多少种历法,都可以把它们分别归到以下三大系统中去: 阳历、阴历、阴阳合历
        这是因为计算时间,要么以地球绕太阳公转的周期为基础,要么以月亮绕地球公转的周期为基础,要么把两种周期加以调和。前者属于 阳历系统,后者属于 阴历系统,调和者则属于 阴阳合历系统
        前全世界通用的 格里历 历法称为公历,它实质上是一种阳历。

Boost时间库说明:
        日历系统是最简单的时间系统,它的分辨率最大,为一天。格里历系统是当今使用最广的日历系统(ISO系统基本上就是衍生自它)。不过,还有很多其它的日历系统。
        UTC (Coordinated Universal Time)是一个广泛使用的民用时间系统。因为地球的自转,UTC要通过闰秒来进行调整(这不是可预测的,只是按需要进行调整)。

      多数本地时间系统都基于UTC,但还要根据地球自转来进行调整,以使得各处白天的时间相似。另外,有些本地时间还包括了夏时制(DST)的调整,在夏天的时候对白天的时间进行平移。

        由于系统中使用的都是UTC时间,导致不可避免的折衷本库尽最大努力提供用户可能想要的所有东西,但是还是存在一些任何时间程序库都会遇到的固有的限制。尤其是,用户必须在任何应用都想得到的以下三种能力中选择两个:

  • 与 wall-clock 时间的精确吻合        
  • 精确的数学,如:时长计算 
  • 处理未来时间点的能力 
有的程序库可能暗中许诺提供所有三种能力,但是如果你真的对它们进行测试,就会发现同时只能有两个为真。这种限制不是任何特定程序库的设计或实现上的不足;而是由国际标准所定义的不同时间系统所造成的结果。我们来看看以下三种情形:
  • 如果你想精确吻合 wall-clock 时间,你就必须使用 UTC 或本地时间。如果你通过将两个 UTC 时间相减来计算得到一个时长,并且希望结果精确到秒,那么这两个时间必须不能是很远的未来,因为闰秒会影响结果而只能确定未来大约6个月的时间。对于本地 时间,未来时长的计算应该限制在一个小时内,因为相关机构可以在未来改变 DST 规则。 
  • 如果使用wall-clock 时间,你就不能(一般而言)精确计算时长,原因同上。 
  • 如果你想精确计算未来时间,你就必须使用 TAI 或其它等价物,但是从 TAI 到 UTC 或本地时间的映射是依赖于闰秒的,所以你无法与 wall-clock 时间精确吻合。

你可能感兴趣的:(时间,UTC)