定义秒长:
- 原子时 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 时间精确吻合。