date命令相关的时间标准

来源:互联网 发布:linux 打印机 编辑:程序博客网 时间:2024/06/05 08:54


###################################################################################################################  

今天在总结date命令的时候,看到一篇博客上介绍的时间标准。
    首先我们了解一下时间的相关概念,以及之间的区别,需要了解的时间概念有:
    本地时间(locale time LT)
    格林威治时间(Greenwich Mean Time GMT
    世界协调时间 (Universal Time Coordinated UTC
    本地时间,显而易见不用解释了
    先看看时间的标准:
   (1)世界时 
    世界时是最早的时间标准。在1884年,国际上将1s确定为全年内每日平均长度的1/86400。以此标准形成的时间系统,称为世界时,即 UT1。1972年国际上开始使用国际原子时标,从那以后,经过格林威治老天文台本初子午线的时间便被称为世界时,即UT2,或称格林威治时间 (GMT),是对地球转速周期性差异进行校正后的世界时。 
   (2)原子时 
    1967年,人们利用铯原子振荡周期极为规律的特性,研制出 了高精度的原子时钟,将铯原子能级跃迁辐射9192631770周所经历的时间定为 1s。现在用的时间就是1971年10月定义的国际原子时,是通过世界上大约200多台原子钟进行对比后,再由国际度量衡局时间所进行数据处理,得出的统一的原子时,简称TAI。 
   (3)世界协调时
    世界协调时是以地球自转为基础的时间标准。由于地球自转速度并不均匀,并非每天都是精确的86400原子s,因而导致了自转时间与世界时之间存在18个月有1s的误差。为纠正这种误差,国际地球自转研究所根据地球自转的实际情况对格林威治时间进行增减闰s的调整,与国际度量衡局时间所联合向全世界发布标准时间,这就是所谓的世界协调时(UTC: Coordinate Universal Time)。UTC的表示方式为:年(y)、月(m)、日(d)、时(h)、分(min)、秒(s),均用数字表示。
    GPS 系统有两种时间区分,一为UTC,另一为LT(地方时)两者的区别为时区不同,UTC就是0时区的时间,地方时为本地时间,如北京为早上八点(东八区),UTC时间就为零点,时间比北京时晚八小时,以此计算即可。
    通过上面的了解,我们可以认为格林威治时间就是时间协调时间(GMT=UTC),格林威治时间和UTC时间均用秒数来计算的。
    而在我们平时工作当看到的计算机日志里面写的时间大多数是用UTC时间来计算的,那么我们该怎么将UTC时间转化为本地时间便于查看日志,那么在作程序开发时又该怎么将本地时间转化为UTC时间呢?

    下面就介绍一个简单而实用的工具,就是使用linux/unix命令date来进行本地时间和UTC时间的转化。
    大家都知道,在计算机看到的UTC时间都是从(1970年01月01日 0:00:00)开始计算秒数的。所看到的UTC时间那就是从1970年这个时间点起到具体时间共有多少秒。
    1.使用date命令获得本地时间
    Sun Dec  5 19:58:41 CST 2010    //CST的含义见最后部分
    2.将本地易理解的时间转化为UTC时间,使用date 命令,对该时间进行UTC格式化
    date +%s -d "Sun Dec  5 19:58:41 CST 2010"
    返回的结果是:1291550321 #自1970年1月1日0:00:00起到今天晚上19:58:41共1291550321秒,1291550321这就是我们所说的UTC或者格林威治时间。
    3.使用命令date将难以理解的UTC时间转化成为容易理解的本地时间
    在这里,我们随便将上面这个格林威治时间修改一下来进行转化即可,比如1291550399 
    date -d "1970-01-01 UTC 1291550399 sec"
    返回结果是:Sun Dec  5 19:59:59 CST 2010   // 是今天晚上19:59:59
    4.使用date命令将本地时间进行格式化
    date +%X -d "Sun Dec  5 19:59:59 CST 2010"
    返回结果:07:59:59 PM
    date +'%x +%X' -d "Sun Dec  5 19:59:59 CST 2010"
    返回结果是:12/05/2010 +07:59:59 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' -d "Sun Dec  6 19:59:59 CST 2010"
    返回结果是:2010-12-06 19:59:59
    5.对UTC时间的进行格式化
    date +'%x %X' -d "1970-01-01 UTC 1291550399 sec"
    返回结果:12/05/2010 07:59:59 PM

    很多unix下国时区都是用CST表示的。但是这个表示方法非常不合理。因为CST同时代表了下面4个时区。     CST Central Standard Time (USA) UT-6:00     CST Central Standard Time (Australia) UT+9:30     CST China Standard Time UT+8:00     CST Cuba Standard Time UT-4:00 
date       本地时间
date -u      UTC时间
date +%s      本地时间转化为UTC所对应的秒
date -u +'%Y%m%d_%H%M%S %Z' -d "1970-01-01 UTC $seconds sec"   格式化成UTC时间
date  +'%Y%m%d_%H%M%S %Z' -d "1970-01-01 CST $seconds sec"  格式化成CST时间
date  +'%Y%m%d_%H%M%S %Z' -d "1970-01-01 EST $seconds sec"  格式化成EST时间


0 0
原创粉丝点击