深入理解GMT,UTC和Unix时间戳

文章目录

  • 前言
  • 准备工作
  • 格林威治标准时间 GMT
  • 协调世界时间 UTC
  • Unix 时间戳(Unix Time Stamp)
  • 小结

前言

随时全球化的发展,国内的企业已经开始越来越多地与国际接轨,超出国门而向全球用户。由于大家都知道原因:地球是圆的,所以针对不是国家的地区所使用的时间表示问题,成为全球化中的一个重要问题,就此本文对三个重要的时间概念:GMT、UTC和Unix时间戳进行详细说明。

准备工作

在开始文章之前,我们首先讨论一个最基本的问题,如何决定“一天的开始”?相信所有人都理“一天”表示的是地球自转一周的用时,即便在古代,人们不知道地球是圆的,根据太阳的运行轨迹,也知道太阳转一圈就是一天。但是现在的问题是,什么是一天的开始,即这一时刻如何界定?这个看似简单的问题,实际上在历史上不同的国家有不同的处理方式,经过多年的摸索,最终决定时间的方式是用正午来决定,即利用中午太阳光的影子与指定线重叠的时刻为12点,因为这样最容易确定且误差最小。这种计时方式因为利用的是太阳定位,所以称之为太阳日。相对的还有有地球日,即地球上指定经线自动一周后重叠所用的时间。一个太阳日比地球日少约4分钟,换言之每年地球会有365(闰年366)个太阳日,而会有366(闰年367)个地球日。具体原因不在本文讨论范围内,有兴趣的可以自行研究。因此,只要正午12点定了,那么根据每天24小时,早晚的时间也都可以确定了。有了这个基础,下面我们再看这三个概念。

格林威治标准时间 GMT

根据维基百科,格林威治标准时间(Greenwich Mean Time)是伦敦格林威治皇家天文台计算的平均太阳时间,但是由于在过去的不同时期,它的计算方法有所不同,包括从中午开始计算; 因此,除非给出上下文,否则它不能用于指定准确的时间。英国经常将GMT用作协调世界时(UTC)的同义词。对于导航,它被认为等效于UT1(即现代的平均经度为0°的太阳时间); 但是此含义与UTC的差异最多可以达到0.9 秒。因此,术语GMT不应用于某些需要精确度的技术目的。

简单地说,GMT由于计算精度、历史算法等问题,有一定的确定性和不准确性,在精度高的场合不合适,所以现在逐渐被UTC取代,比如在Java中,默认的时间就是UTC。

协调世界时间 UTC

协调世界时(Coordinated Universal Time)是世界各地用来调节时钟和时间的主要时间标准,定义为:位于0度经度的平均太阳时间,是格林威治标准时间(GMT)的后继者。所以UTC也是太阳日计日方法。自1960年1月1日开始在世界范围内进行时间和频率传输的协调,并于1963年首次被正式采纳为CCIR 374建议书“标准频率和时间信号发射”。

冷知识:根据英文语法其缩写应该为CUT才对,但是在法国其写法为:Temps Universel Coordonné,缩写为TUC,因此双方经过多次协商,直到1967年才达成统一为意见UTC为双方所接受。

Unix 时间戳(Unix Time Stamp)

Unix时间戳是一种跟踪时间(以秒为单位)的方式。 此计数从1970年1月1日UTC的Unix Epoch开始。 因此,unix时间戳仅仅是特定日期与Unix纪元之间的秒数。 所以,这个时间是不考虑任何的计算方式的,非常简单有效的,只表示当前时间与开始时间的秒差,这样无论任何作用者,无论身在何处,作用何种计时方式,该时间点在技术上都是一样的。对于当地使用者,只需要进行一次转换即可变为当前时间。这种计时对于计算机系统在在线和客户端动态和分布式应用程序中跟踪和排序日期信息非常有用。所以被广泛使用在Unix操作系统中(后来的Linux,Windows等系统也都支持此计时方式)。

小结

本文简单简介了三种时间表示方式。基于准确可靠的原则,推荐使用UTC表示全球时间,在计算机中计时时,使用Unix Time Stamp,从而在全球范围内实现准确可靠一致的时间表示。