任何人都需要知道的「世界时间系统」构成原理,尤其开发人员
编程新说(李新杰) 人气:1
下面是同一时刻的中国时间、英国时间和美国时间:
此时此刻,中国的人们刚午休完准备开始下午的工作,英国的人们已经睡了一晚上正准备早晨起床,美国的人们有的还在熬夜、有的已经进入梦乡,但不管睡没睡,他们都即将迎来新的一天。
为什么会是这样的呢?本文将告诉你完整的答案,记住本文之后,够你受用一辈子,至少也会是半辈子,祝愿所有的读者都能够去实地看一看。
引言
人们很早就知道自己脚下的这片土地非常大,还知道在很远的地方居住着其它人们,还有山川、河流、大海。但是人们并没有办法给出很远的地方到底在哪里。
就像小孩子问你,美国在哪里,大人们总是说,美国和中国之间啊,有一个很大的大海,美国就在大海的对岸,总之很远。
后来人们认识到地球是一个球体,但是人们依然没有好的办法给出很远的地方究竟在哪里。就像我们对小孩说,美国啊,在地球的另一面,总之还是很远。
经度、纬度
为了更好的描述地球上的一个具体位置,人们引入了经度和纬度的概念,并规定,东西方向的线是纬线,南北方向的线是经线。
由于地球是自西向东转动,且球体中间是最粗的地方,所以就把地球的中间定义为纬度的起点,即0度纬线,其实就是赤道了。
往北半球称为北纬,南半球称为南纬。可见赤道是最长的纬线,越往南北极方向走,纬线越短,且北极是北纬90度,南极是南纬90度。
纬度的起点选在赤道没有任何争议,但是经度的起点选在哪里呢?这确实是一个问题,因为每条经线都是一样长的,且没有什么本质差别。
1851年御用天文学家艾里在英国伦敦格林威治天文台设置中星仪,并以此确定格林威治子午线。因为当时超过三分之二的船只已使用该线为参考子午线,在1884年于美国华盛顿特区举行的国际本初子午线大会上正式定之为经度的起点。
(格林威治天文台)
因此经过这个地方的经线就是0度经线,又称为本初子午线。自此向东称为东经,向西称为西经。0度经线被东经和西经共用。
(0度经线 / 本初子午线)
由于一个圆周是360度,东经西经各分一半,所以都是180度,且东经西经的终点是重合的,就在180度处,就像它们的起点也是重合的,就在0度处一样。
所以经过180度处的经线同样被东经和西经共用,由于180度经线和0度经线正好相对,因此又称为对向子午线,是和本初子午线相对的一种叫法。
因此,东经0度和西经0度是一样的,同样东经180度和西经180度也是一样的,那么自然北纬0度和南纬0度也是一样的。
时区
虽然截止到现在科学界对于时间的研究还没有什么结论,但是人们对于时间的认识却是在很早很早以前就开始了。
人们认识到日出东方落于西山,昼夜交替日复一日,都是源于地球的自转,能照到太阳光的地方就是白天,照不到的就是黑夜。
因此人们认为时间和地球的自转有关,由于自转是自西向东的,主要和经度有关,所以时间也和经度有关。
以前国际时间不统一,经常出现“穿越”情况,比如收到信件的当地时间比寄出信件的当地时间还要早,即人家还没寄呢你就已经收到了。
1879年,加拿大铁路工程师伏列明提出了“区时”的概念,在1884年的一次国际会议上得到认同,由此正式建立了统一世界计量时刻的“区时系统”。
该系统规定,地球上每15度经度范围作为一个区域(即太阳1个小时内走过的经度)。这样,整个地球的表面就被划分为24个区域。
每个区域内的时间都按照该区域的中央经线(距离东西两侧各7.5度位置的那条经线)处的时间来计量,这样一个区域内就只有一个时间了。
由于每天是24小时,地球一周被分为了24个区域,所以每个区域的时长是1小时,且相邻区域的时间差值也是1小时。
因此我们可以从两个方面来理解时区,一是用区域来表示时间,即时间的区域,二是每个区域是1小时,相邻区域相差也是1小时。
现实中时区并不是严格按经线来划分的,而是按自然条件来划分的。因为实际上,常常1个国家或1个省份同时跨着2个或更多时区,为了照顾到行政上的方便,常将1个国家或1个省份划在一起。
和纬度、经度有起点一样,时区也有起点,而且这个起点应该和某条经线有关。没错,答案和你想的是一样的。
同样是在1884年的那个会议上,不仅把经过英国伦敦东南格林威治的经线作为计算地理的起点,同时也作为世界时区的起点。
该时区称为0时区,自此向东称为东时区,向西称为西时区,0时区是东时区和西时区的分界线,也可以认为被东西时区共用。
东边从东1时区到东11时区,西边从西1时区到西11时区,这样还剩一个时区,就是12时区,它同样是东时区和西时区交界处的分界线。
也可以认为被东西时区共用,因此既可以称为东12时区,也可以称为西12时区,其实是一样的。
因此,东时区和西时区从0时区开始,向东和向西延伸,到12时区处相交。0时区是起点,12时区是终点。
时间系统
本初子午线又叫格林威治子午线,它也曾经被用作时间的标准,称为格林威治时间,缩写是GMT。程序员都应该很熟悉了。
即以格林威治当地的时间作为一个标准时间,然后其它地方的时间根据地球的自转推算出来,所以格林威治时间在天文领域应用广泛。
可以说格林威治时间是以地球自转为基础的时间计量系统,可是后来人们认识到地球自转速度并不规则,因此格林威治时间已由协调世界时取代。
协调世界时,又称世界统一时间、世界标准时间、国际协调时间。是以原子时秒长为基础的一种时间计量系统。
协调世界时是由格林威治时间演化而来,格林威治时间因为本初子午线经过英国伦敦的格林威治而得名,但是本初子午线除了经过英国外还经过了法国等共8个国家。
协调世界时在英文中的缩写是CUT,在法文中的缩写是TUC,它们是不相同的,为了照顾多方,最后做出妥协,缩写定为UTC,因此也称UTC时间。
按照格林威治时间系统的定义,格林威治时间是标准时间,即GMT。由于地球自西向东转,所以东边先看到太阳,因此格林威治东边的时间比格林威治早(提前到来),西边的则比格林威治晚(滞后到来)。
又由于一个时区就是一个小时,因此,东1时区的时间就是格林威治时间加上1小时,即GMT+1,中国采用东8时区时间,即GMT+8。西1时区的时间就是格林威治时间减去1小时,即GMT-1。
这种写法我们都见过,除了这里说的用来表示时间之外,它也可以用来表示时区。GMT就是0时区,GMT+1就是东1时区,GMT-1就是西1时区。
后来改为世界协调时间之后就成UTC了,于是就变成UTC+1,UTC+8,UTC-1,基本含义还是保持不变的。
可以看到,时间系统的定义就是由一个基准时间加上偏移量组成,偏移量是正的表示向较早(东边或未来)的时间偏移,偏移量是负的表示向较晚(西边或过去)的时间偏移。
为了降低复杂度,偏移量都是按整小时来算的,不考虑分钟和秒等,所以全世界的时间里的分钟和秒都是一样的,只要小时是不同的,因此全世界只有24种不同的时间。
“时间的起点”
对于一个环形物体,其实是没有严格意义的开始位置和结束位置的,同样也没有严格意义的前后,除非人为指定一个特殊位置作为起点。
比如两个人在操场的环形跑道上跑步,假设你第一次看到时,这两人已经跑了一会儿了,此时根本无法分出谁在前谁在后。
就像地球的自西向东转动一样,根本无法分出谁在东方、谁在西方,因为往东走和往西走都能到达目的地。自然也不知道谁靠前、谁靠后。很多人认为中国在东方,美国在西方。
理由是中国是中午时,美国还是半夜呢,因此中国先看到太阳,所以比美国早,因此中国在东方。这种逻辑是不对的,因为美国是中午时,中国也是半夜啊。
因此我们需要一个特殊的位置作为“时间的起点”,没错,这个特殊的位置就是0度经线,即本初子午线,也称格林威治子午线,也是0时区,就在英国伦敦。
时间起点的位置找到了,那么时间的起点应该是几点呢?按照正常人的思维,时间的起点应该是凌晨0点。那到底对不对呢,来检测下便知。
把伦敦的0时区当作凌晨0点,向东走,到中国时应该是上午8点,继续向东,到美国时应该是下午18点,这样一来美国的时间就比中国的还早了,这是错误的,可以在网上查一下,美国的时间是比中国晚的。
我们的逻辑并没有错,错就错在时间的起点假设错了,不应该是凌晨0点。站在古人的角度,凌晨0点是三更半夜,黑灯瞎火的,没有什么意思啊。
古人渴望的是太阳,它们需要的是阳光,看到阳光就看到了希望。再说了,大家都是崇拜光明的,崇拜黑暗的是黑暗圣骑士,是邪恶的,哈哈。
而且0度经线又叫本初子午线,子代表子夜,也可以理解为子时,即晚上23点到次日凌晨1点这个时辰。午代表正午,也可以理解为午时,即中午11点到下午1点这个时辰。
而且理论上来说,格林威治标准时间的正午是指当太阳横穿格林威治子午线时的时间。因此把正午12点作为时间的起点,再来检测一下。
把伦敦的0时区当作正午12点,向东走,到中国时应该是晚上20点,由于中国是东8时区,再向东走4个时区就到了12时区,此时是凌晨24点(或0点),正好位于白令海峡附近。
再往东走就该变更日期了,由于12时区的中点就是180度经线的位置,1884年国际经度会议规定把它作为地球上“今天”和“昨天”的分界线,因此把这条经线称为国际日期变更线,它主要位于太平洋中。
按照规定,凡是越过这条变更线时,日期都要发生变化,从东向西越过这条界线时,日期要加上1天(到了未来),从西向东越过这条界线时,日期要减去1天(到了过去)。这条线又叫“人为日界线”。
关于日期加1天还是减1天,可以这样理解,当正午(12点)的阳光照射在伦敦的本初子午线上时,紧挨着国际日期变更线左侧(西边)的时间是晚上23点59分,这个时间已经从中午12点经过,所以靠前。也就是说伦敦是中午的时候,这里已经是半夜了。
紧挨着国际日期变更线右侧(东边)的时间是凌晨0点01分,这个时间还未到中午12点,所以靠后。也就是说伦敦是中午的时候,这里还是凌晨,天还没亮呢。
因此,从东向西越线要加1天,可以认为是从今天到明天,即到了未来的时间,从西向东越线要减1天,可以认为是从今天到昨天,即到了过去的时间。
再回到刚才有关“时间的起点是几点”的检测,我们是从西往东走的,所以在白令海峡这里要减1天,即回到了昨天凌晨0点,再往东走6个时区就到了美国,所以美国此时是早上6点,而且应该是昨天早上。
我们来算一下时间差,中国是晚上20点,美国是早上6点,正好相差14个小时,即中国比美国早14个小时,这是对的,但是美国应该是今天早上6点,而不是昨天早上6点。
这主要是我们举得例子比较特殊,此时中国和美国都在国际日期变更线的右侧,也可以认为两国都已经从国际日期变更线上转过去了,所以日期是同一天。
由于一天是24小时,中国比美国早14小时,所以中国和美国能够拥有相同日期的时长是每天只有10小时。且从中国北京时间的下午2点到晚上23点59分,对应的美国时间是从凌晨0点0分到上午10点。这段时间内,两国的日期是同一天,
剩下的时间段内,中国日期比美国早1天。即中国已经进入新的一天了,美国需要在14个小时后才能进入新的一天。即中国北京时间的今天凌晨0点到下午2点,对应美国昨天的上午10点到晚上23点59分。在这个14小时内,中国日期比美国早1天。
早晚、前后
相信有些读者的大脑已出现“脑力不足”的信号,因为这里讲的时间和我们日常生活中的时间是不一样的,主要是角度不同,这里讲的是世界时间,日常生活中指的是当地时间。且当地时间只有一个,世界时间有24个呢。
先说当地时间,无论什么时候,一个地方的当地时间只有一个,比如你在3月2日买了一个笔记本电脑,他在3月3日买了一个,那么你比他买的早,他比你买的晚。
所以在当地时间这个上下文中,指的是事件发生的早晚问题,且日期越小发生的越早,日期越大发生的越晚。再如80后比90后出生的早,00后比90后出生的晚。
再说世界时间,在世界上不同的地方(时区),同一时刻的时间是不一样的,一个时区一个时间,共24个不同的时间。既然时间是不同的,那就一定是有的时间靠前,有的时间靠后。
以地球的自转来说,先看到太阳的地方的时间靠前,后看到太阳的地方的时间靠后。由于地球是自西向东转,所以东边的地方先看到太阳,西边的地方后看到太阳,因此东边的时间靠前,西边的时间靠后。
同样太阳下山时,也是东边先看不到,然后是西边再看不到,在中国,当东北已经进入黑夜了,新疆那里还艳阳高照呢,因为中国横跨了5个时区,从东5时区到东9时区,为什么中国采用东8区时间呢,因为北京在严格意义的东8区,上海也在。
这样只是分出了时间的(超/靠)前(滞/靠)后,但是我们不能说10点就一定比9点靠前,因为可能是昨天的10点和今天的9点,因此这里还有一个日期的问题,必须要进行日期的分界。
由于地球是圆球状,没有明显的分割线,所以只能人为的指定一条线作为分割线,它就是180度经线,也称对向子午线。根据地球自转方向来规定,分割线左侧(西边)为新一(明)天的开始,分割线右侧(东边)为当下这一(今)天的结束。
由于这一条线对应着国际日期的变更,因此被称为国际日期变更线。因此从东向西越线要加1天,等于来到了新的一天(next day),从西向东越线要减1天,等于回到了过去的一天(prev day)。
最后举个示例,假设现在是当地时间2020-03-02 14:00:00,你从变更线的左侧(西边)跳到右侧(东边),然后站着不动,由于地球自西向东转,且24小时才转一圈,所以24小时后才转回到你起跳之前的位置,说明你跳到了24小时之前,即穿越到了昨天(过去)。
即跳起的一瞬间,落地点的当地时间比起跳点的当地时间晚了24个小时,正好晚了1天,所以要减1天。等于穿越到了过去。因此落地的时间是2020-03-01 14:00:00,所以就是从西向东跳过国际日期变更线要减1天,相反从东向西跳过要加1天。
(END)
作者现任架构师,工作11年,Java技术栈,计算机基础,用心写文章,喜欢研究技术,崇尚简单快乐。追求以通俗易懂的语言解说技术,希望所有的读者都能看懂并记住。
>>> 热门文章集锦 <<<
毕业10年,我有话说
我是一个协程
我是一个跳表
线程池开门营业招聘开发人员的一天
递归 —— 你值得拥有
迄今为止最好理解的ZooKeeper入门文章
基于角色的访问控制(RBAC)
彻彻底底给你讲明白啥是SpringMvc异步处理
【面试】我是如何面试别人List相关知识的,深度有点长文
我是如何在毕业不久只用1年就升为开发组长的
爸爸又给Spring MVC生了个弟弟叫Spring WebFlux
【面试】我是如何在面试别人Spring事务时“套路”对方的
【面试】Spring事务面试考点吐血整理(建议珍藏)
【面试】吃透了这些Redis知识点,面试官一定觉得你很NB(干货 | 建议珍藏)
【面试】如果你这样回答“什么是线程安全”,面试官都会对你刮目相看(建议珍藏)
【面试】迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章(快快珍藏)
【面试】一篇文章帮你彻底搞清楚“I/O多路复用”和“异步I/O”的前世今生(深度好文,建议珍藏)
【面试】如果把线程当作一个人来对待,所有问题都瞬间明白了
Java多线程通关———基础知识挑战
品Spring:帝国的基石
>>> 玩转SpringBoot系列文章 <<<
【玩转SpringBoot】配置文件yml的正确打开姿势
【玩转SpringBoot】用好条件相关注解,开启自动配置之门
【玩转SpringBoot】给自动配置来个整体大揭秘
【玩转SpringBoot】看似复杂的Environment其实很简单
【玩转SpringBoot】翻身做主人,一统web服务器
【玩转SpringBoot】让错误处理重新由web服务器接管
【玩转SpringBoot】SpringBoot应用的启动过程一览表
【玩转SpringBoot】通过事件机制参与SpringBoot应用的启动过程
【玩转SpringBoot】异步任务执行与其线程池配置
>>> 品Spring系列文章 <<<
品Spring:帝国的基石
品Spring:bean定义上梁山
品Spring:实现bean定义时采用的“先进生产力”
品Spring:注解终于“成功上位”
品Spring:能工巧匠们对注解的“加持”
品Spring:SpringBoot和Spring到底有没有本质的不同?
品Spring:负责bean定义注册的两个“排头兵”
品Spring:SpringBoot轻松取胜bean定义注册的“第一阶段”
品Spring:SpringBoot发起bean定义注册的“二次攻坚战”
品Spring:注解之王@Configuration和它的一众“小弟们”
品Spring:bean工厂后处理器的调用规则
品Spring:详细解说bean后处理器
品Spring:对@PostConstruct和@PreDestroy注解的处理方法
品Spring:对@Resource注解的处理方法
品Spring:对@Autowired和@Value注解的处理方法
品Spring:真没想到,三十步才能完成一个bean实例的创建
品Spring:关于@Scheduled定时任务的思考与探索,结果尴尬了
加载全部内容