UTC(世界标准时间)
协调世界时,又称世界标准时间或世界协调时间,简称UTC(英文 Coordinated Universal Time),相当于标准时间。其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间。
GMT(格林尼治平时)
格林尼治平时(又称格林尼治平均时间或格林尼治标准时间,旧译格林威治标准时间;英语:Greenwich MeanTime,GMT)是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。
理论上来说,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间。由于地球在它的椭圆轨道里的运动速度不均匀,这个时刻可能与实际的太阳时有误差,最大误差达16分钟。
由于地球每天的自转是有些不规则的,而且正在缓慢减速,因此格林尼治时间已经不再被作为标准时间使用。现在的标准时间,是由原子钟报时的协调世界时(UTC)。
CST(中国标准时间)
China Standard Time,中国标准时间。在时区划分上,属东八区,比协调世界时早8小时,记为UTC+8。
不过这个CST这个缩写比较纠结的是它可以同时代表四个不同的时间:
Central Standard Time (USA) UT-6:00
Central Standard Time (Australia) UT+9:30
China Standard Time UT+8:00
Cuba Standard Time UT-4:00
Java中 Date使用UTC时间,如 Tue Jan 05 14:28:41 CST 2016 表示China Standard Time UT+8:00
最近正好遇到一个问题,数据库时间是对的,时区也是CST(中国标准时间),但后台界面显示的时间比mysql存储的多了13小时!
原因就是Java和Mysql协商时区时把 Mysql 的 CST 时间以美国中部时间:UTC-5 当做标准,而我们用的是东八区的北京时间 UTC+8,所以我从数据库中读取的 UTC-5 时间到了Java 程序里就自动转化为 UTC+8 时间,也就比数据库里的时间多了 13 个小时。
解决方案:
java应用配置的mysql jdbc连接上追加时区的指定 &serverTimezone=Asia/Shanghai
查看数据库时区
show variables like '%time_zone%'
这里有两个变量,其中 time_zone 是指 mysql 数据库的时区。默认为 SYSTEM,即等于服务器的系统时区。
system_time_zone 表示系统时区,因为我们的系统服务器是在中国,system_time_zone 为 CST(China Standard Time)。
这里有个坑,CST 除了表示中国时区,它还有更多含义:
美国中部时间 Central Standard Time (USA) UTC-06:00
澳大利亚中部时间 Central Standard Time (Australia) UTC+09:30
中国标准时 China Standard Time UTC+08:00
古巴标准时 Cuba Standard Time UTC-04:00比如说 jdbc 驱动在读取到 system_time_zone 是 CST 后,它会默认为 美国中部时间而不是中国标准时。中国标准时与美国标准时相差 14个小时,最终取出来的时间比你实际存入的时间少14个小时(因为夏令时的缘故有时会少13个小时)。
闰年
闰年,西方叫做Leap Year,是为了弥补因人为历法规定的年度天数365日和地球实际公转周期(大约365.24219日)的时间差而设立的。我们知道现行的公历纪年是以地球环绕太阳公转一周所需的时间作为依据,而地球绕太阳公转一周的时间,经过精确计算大约是365天5小时48分46秒,但是人们为了计算方便,规定365天为一年,这会导致每过一年就会多出来5小时48分46秒,4年下来就几乎多出了一天。为了补偿这种差异,人们就在特定年份增加一天,全年变为366天,这就是“闰年制度”。
“闰年制度”早在古罗马时期就已经被确定。公元前45年,罗马共和国的尤利乌斯·凯撒(Julius Caesar),史称凯撒大帝,将四年一闰的规则纳入历法(儒略历),以纠正历法年与太阳年之间的偏差。然而,儒略历的闰年规则仍有微小的误差,每四年增加一天,实际上比太阳年的真实长度略长。这种累积的误差在几个世纪后变得显著。到了16世纪,这种误差已经累积到了大约10天,导致春分日的日期与历法上的日期严重不符,为了解决这一问题,1582年,教皇格里高利十三世(Pope Gregory XIII)颁布了格里高利历(Gregorian Calendar),对闰年规则进行了调整。新规则规定,能被100整除的年份不再是闰年,除非它们同时能被400整除。这一改变减少了闰年的数量,使得历法年与太阳年的偏差得到了更精确的校正。格里高利历的这一改革逐渐被世界各地采用,成为了现代国际通用的历法。
闰月
闰月是指在农历年份中插入一个额外的月份,以调整农历和阳历之间的差异。农历是根据月亮运行周期计算的,一个月平均约为29.5天,那么一年下来总天数只有354天左右。而一个太阳年(地球绕太阳一周所需时间)的长度为365.24天左右。这意味着农历年份和太阳年份之间,会存在一定的差异。
根据历史数据的统计,闰月的出现频率并不是均匀分布的。近三百年间,闰二月一共出现九次,闰三月和闰六月各出现过十六次,闰四月则是出现过十九次,闰五月出现过二十三次左右,闰七月出现了大约十三次,闰八月则是出现了七次,而闰九月和闰十月各出现三次,但是闰腊月、以及闰正月从未出现过一次。
闰月的出现是为了调整农历和太阳历之间的差异,确保农历与四季的对应关系。根据农历的规律,闰月大约每隔两至三年出现一次
闰秒
闰秒,是指为保持协调世界时接近于世界时时刻,由国际计量局统一规定在年底或年中(也可能在季末)对协调世界时增加或减少1秒的调整。由于地球自转的不均匀性和长期变慢性(主要由潮汐摩擦引起的),会使世界时(民用时)和原子时之间相差超过到±0.9秒时,就把协调世界时向前拨1秒(负闰秒,最后一分钟为59秒)或向后拨1秒(正闰秒,最后一分钟为61秒); 闰秒一般加在公历年末或公历六月末。
全球已经进行了27次闰秒,均为正闰秒。
本地时间
在日常生活中所使用的时间我们通常称之为本地时间。这个时间等于我们所在(或者所使用)时区内的当地时间,它由与世界标准时间(UTC)之间的偏移量来定义。这个偏移量可以表示为 UTC- 或 UTC+,后面接上偏移的小时和分钟数。
其他扩展:数据库时区都有哪些,如何查看、更改数据库全局、会话时区?
其他有趣的天文科普: