一些时间的知识
前阵子因工作需要写了个日期选择器组件,包括时间选择器,当时查阅了很多关于时间、历法等资料,写篇文章总结一下学到相关知识点。
时间相关概念
时间单位
日常生活中描述时间的单位,年、月、日、小时、分钟、秒、毫秒、微秒。
UTC的由来
格林威治时间(GMT)
本初子午线所在的平太阳时世界时(UT)
规定一天的开始为午夜的 GMT 时间,区别于 GMT 所规定正午为一天的开始UT0、UT1、UT1R、UT2
UT的不同版本,为了解决地球自传不均匀导致的时间流逝不匀的各种世界时规范版本原子时(TAI)
确立了均匀流动的时间定义,定义一秒为铯-133原子基态两个超精细能级间跃迁辐射振荡9,192,631,770周所持续的时间,从1958年开始协调世界时(UTC)
在原子时的基础上添加闰秒确保与UT1的误差在0.9秒内
闰秒
时间到底是什么?1秒究竟有多长?李永乐老师讲石英钟和原子钟生活日常
The Unix leap second mess
关于闰秒
闰秒
简单理解就是地球自转的速度变慢了,通过原子钟这样线性增长的时钟计算得出,太阳东升西落的时间变长了。但我们使用原子时的同时还是需要维持0点时太阳刚好经过本初子午线这样的规律,即使原子时本身现在是0:0:0.900(举个例子),所以我们假设这一天有第60秒,那就又可以称太阳经过本初子午线时是凌晨的0点啦~所以在使用原子时到现在,实际原子时已经比UTC领先30+秒。
时区
时区的划分是为了解决世界使用同一个时间时因经度不同而造成的地方时不同,时区的划分除了与地区所在经度有关,还与地区所在的国家、不同时间该地区的政治形势有关。
历法相关概念
太阳历
我们现在所使用的公历,就是太阳历、格里历(gregorian calendar)。格里历是从儒略历改进而来,儒略历定义365.25天为一年,不满一天的时间,在2月中加入闰日即29日来补齐,2月是否有闰日的计算方法为当前年是否能被 4 整除。
但里利乌斯(Aloysius Lilius)发现,一年实际只有365.2425天(现代测量精确值为365.24237),按以前的方法计算日期,每400年就会多出3天,即400 * ( 365.25 - 365.2425) = 3
,于是重新定义了每年是否有闰日的算法,能被4整除的基础上,如果当前能被100整除则必须被400整除,对比于现代测量值,精度为每8000年误差一天。
阴历
阴历就是使用月亮的运动周期来确定日期,月亮绕地球运动一周是29.5天。令我觉得很神奇的是,阴历也定12个月为一年。现在还使用阴历历法的有伊斯兰历,主要是用来指导宗教节日,所以伊斯兰中同一个节日,有可能是在冬天,也有可能是在夏天。
二十四节气
二十四节气是中国的伟大发明,主要是用来指导农业生产。农业生产与四季有关,道理很简单因为农作物需要阳光,而四季交替是与太阳的运动有关的,所以古人把太阳每运动了15°的那一天定为一个节气,360 / 15 = 24
,这就是二十四节气的由来。所以说节气是需要根据太阳的运动来确定的,每年的节气无法通过一种准确的算法得出,只能依靠天文科学家的预测。这也能很好的说明,每个节气的间隔是不一定相等的,地球绕日运动在近日点运动的速度快,那么间隔时间就会比较短。
农历
没有时钟的古代,月亮的周期性变化比四季的变化周期更小,可以更直观的提现时间的变化。为了将阳历与阴历调和,农历规定,将二十四节气中的偶数,即中气,定为12个月,每个月必须包含一个中气。这样阴历一年的周期 29.5 * 12 = 354
天与当时测得的阳历周期365.2428天(祖冲之《大明历》)会有误差。解决这个问题的办法是每19年中插入7个闰月。
闰月添加在哪个月?阴历一月的平均周期为29.5,阳历两个中气的平均周期为30.5,所以有可能会出现连个中气横跨3个月,而其中一个月没有中气。举个例子,一个中气在2月28日,而下一个中气在4月2日,这样就违反了每个月必须包含一个中气的规则,所以将这空出来的一个月设置为闰月,命名为上一个月的闰月,即闰2月,那么下个中气依然还是在3月。
另外,因为阴历一月的周期不是整数,所以会有大小月之分,小月29,大月30,这个分配也是人为确定的。闰月是否大小月也是单独确定。以上也就可以理解,过春节永远是在冬天,但有时会比上一年晚,或则比上一年早,相对与公历来说,因为公历总是确定的。