相关概念
时区
时区是地球上的区域使用同一个时间定义。以前,人们通过观察太阳的位置(时角)决定时间,这就使得不同经度的地方的时间有所不同(地方时)。1863年,首次使用时区的概念。时区通过设立一个区域的标准时间部分地解决了这个问题。世界各个国家位于地球不同位置上,因此不同国家的日出、日落时间必定有所偏差。这些偏差就是所谓的时差。
理论时区
理论时区以被15整除的子午线为中心,向东西两侧延伸7.5度,即每15°划分一个时区,这是理论时区。理论时区的时间采用其中央经线(或标准经线)的地方时。所以每差一个时区,区时相差一个小时,相差多少个时区,就相差多少个小时。东边的时区时间比西边的时区时间来得早。为了避免日期的紊乱,提出国际日期变更线的概念。
实际时区
但是,为了避开国界线,有的时区的形状并不规则,而且比较大的国家以国家内部行政分界线为时区界线,这是实际时区,即法定时区。
本初子午线
英语:Prime meridian,即0度经线,亦称格林威治子午线、格林尼治子午线或本初经线,是经过英国格林尼治天文台的一条经线(亦称子午线)。本初子午线的东西两边分别定为东经和西经,于180度相遇。
国际日期变更线
英语:InternationalDate Line,又名国际日界线、国际换日线或国际日期线,这条子午线由于穿越陆地,而在陆地变更日期既不方便也不可行,故实际使用的国际换日线是一条基本上只经过海洋表面的折线(见附图)。
为了解决日期紊乱问题,大体以180度经线为日界线;由于照顾行政区域的统一,日界线并不完全沿180°的子午线划分,而是绕过一些岛屿和海峡:由北往南通过白令海峡和阿留申、萨摩亚、斐济、汤加等群岛到达新西兰的东边。
须注意的是,是由东向西越过此线,(从0hr到24hr)日期需加一天;由西向东越过此线,(从24hr到0hr)日期需减一天;如:于2011年4月8日15:45向东航行跨过此线,时间应变为2011年4月7日15:45。原理是从零度经线所在时区向东每跨 1 个区间时钟就拨快 1 小时, 而向西每跨 1 个区间时钟就拨慢 1 小时, 如此一来, 到了另一端经线 180 度附近, 就会有 24 小时的落差。为了平衡此一误差, 人们因而订定了国际换日线。
UTC
协调世界时,又称世界标准时间或世界协调时间,简称UTC(从英文“Coordinated Universal Time”/法文“Temps UniverselCoordonné”而来),是最主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间。
GMT
世界时UT即格林尼治时间,格林尼治所在地的标准时间。
Unix Time
Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)
是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
夏令时
夏时制,夏时令(DaylightSaving Time:DST),又称“日光节约时制”和“夏令时间”,是一种为节约能源而人为规定地方时间的制度,在这一制度实行期间所采用的统一时间称为“夏令时间”。一般在天亮早的夏季人为将时间提前一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。各个采纳夏时制的国家具体规定不同。目前全世界有近110个国家每年要实行夏令时。
夏令时为一个时间段,一般在进入时刻将时钟调快一小时(例如2:00调为3:00),在退出时刻将时钟调慢一小时(例如3:00调为2:00)。
常用Java对时间的处理
本地时间
本地时间是一个相对概念,不同时区的8:00并不是同一个时刻。
从编码的角度去理解为UTC的1970年1月1日00:00:00这一时刻,加上经过的时间差(两个时刻间的时间偏移量),再换算为当前时区时间。
与Unix Time(UTC的1970年1月1日00:00:00)的时间差,是时间偏移的绝对值,这个值本身没有时区属性,是进行时间转换的基准(重要)。
java.util.Date
Date本质上就是相对UnixTime的毫秒数,这一点从其构造函数上可以看出来:
public Date() { |