本地时间与UTC(世界协调时间)的转换

时间:2024-02-17 15:55:58
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lanlfeng.blog.51cto.com/337014/124738
首先我们了解一下时间的相关概念,以及之间的区别,需要了解的时间概念有:
本地时间(locale time)
格林威治时间(Greenwich Mean Time GMT)
时间协调时间 (Universal Time Coordinated UTC)
  本地时间,显而易见不用解释了
  先看看时间的标准:
(1)世界时 
世界时是最早的时间标准。在1884年,国际上将1s确定为全年内每日平均长度的1/8.64×104。以此标准形成的时间系统,称为世界是,即 UT1。1972年国际上开始使用国际原子时标,从那以后,经过格林威治老天文台本初子午线的时间便被称为世界时,即UT2,或称格林威治时间 (GMT),是对地球转速周期性差异进行校正后的世界时。 
(2)原子时 
1967年,人们利用铯原子振荡周期极为规律的特性,研制出了高精度的原子时钟,将铯原子能级跃迁辐射9192631770周所经历的时间定为 1s。现在用的时间就是1971年10月定义的国际原子时,是通过世界上大约200多台原子钟进行对比后,再由国际度量衡局时间所进行数据处理,得出的统 一的原子时,简称TAI。 
(3)世界协调时 
世界协调时是以地球自转为基础的时间标准。由于地球自转速度并不均匀,并非每天都是精确的86400原子s,因而导致了自转时间与世界时之间存在 18个月有1s的误差。为纠正这种误差,国际地球自转研究所根据地球自转的实际情况对格林威治时间进行增减闰s的调整,与国际度量衡局时间所联合向全世界 发布标准时间,这就是所谓的世界协调时(UTC:Coordinatde Universal Time)。UTC的表示方式为:年(y)、月(m)、日(d)、时(h)、分(min)、秒(s),均用数字表示。

  
GPS 系统中有两种时间区分,一为UTC,另一为LT(地方时)两者的区别为时区不同,UTC就是0时区的时间,地方时为本地时间,如北京为早上八点(东八区),UTC时间就为零点,时间比北京时晚八小时,以此计算即可
  通过上面的了解,我们可以认为格林威治时间就是时间协调时间(GMT=UTC),格林威治时间和UTC时间均用秒数来计算的。

   而在我们平时工作当中看到的计算机日志里面写的时间大多数是用UTC时间来计算的,那么我们该怎么将UTC时间转化为本地时间便于查看日志,那么在作程序开发时又该怎么将本地时间转化为UTC时间呢?
   下面就介绍一个简单而使用的工具,就是使用linux/unix命令date来进行本地时间和local时间的转化。
   大家都知道,在计算机中看到的utc时间都是从(1970年01月01日 0:00:00)开始计算秒数的。所看到的UTC时间那就是从1970年这个时间点起到具体时间共有多少秒。
   
  以我的FC9平台为例:
    1.使用date命令获得本地时间
Mon Jan  5 21:06:48 CST 2009
   2.将本地易理解的时间转化为UTC时间,使用date 命令,对该时间进行UTC格式化
date +%s -d "Mon Jan  5 21:06:48 CST 2009"
返回的结果是:1231160808 #自1970年1月1日0:00:00起到今天晚上21:06:48共1231160808秒

  1231160808这就是我们所说的UTC或者格林威治时间。

   3.使用命令date将难以理解的UTC时间转化成为容易理解的本地时间
在这里,我们随便将上面这个格林威治时间修改一下来进行转化即可,比如
1231130828
date -d "1970-01-01 UTC 1231130828 sec"

返回结果是:Mon Jan  5 12:47:08 CST 2009  #是今天中午12:47:08

  4.使用date命令将本地时间进行格式化
date +%X -d "Mon Jan  5 12:47:08 CST 2009"
返回结果:12:47:08 PM

date +%x +%X -d "Mon Jan  5 12:47:08 CST 2009"
返回结果是:01/05/2009 12:47:08 PM

date +\'%x %X %W\' -d "Mon Jan  5 12:47:08 CST 2009"
返回结果:01/05/2009 12:47:08 PM 01   #01是星期一,如果是%w,返回的是1

date +\'%Y-%m-%d %H:%M:%S %W\' -d "Mon Jan  5 12:47:08 CST 2009"
返回结果是:2009-01-05 12:47:08 01

对UTC时间的进行格式化:
date +‘%x %X\' -d "1970-01-01 UTC 1231130828 sec"
返回结果:01/05/2009 12:47:08 PM

date命令还有很多格式化的参数,功能很强大,大家可以使用"man date"或者"info date"来作参考。

对于windows的朋友没有linux环境,没有办法进行时间转化,推举一个网址可以作时间转化:
[url]http://kanlis.7ta.cn/time.html[/url]

本文出自 “ctodream” 博客,请务必保留此出处http://lanlfeng.blog.51cto.com/337014/124738