zoukankan      html  css  js  c++  java
  • linux的那些事-时间 时区

    时间表示:

    用法:date [选项]... [+格式]
     或:date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
    以给定的格式显示当前时间,或是设置系统日期。

      -d,--date=字符串              显示指定字符串所描述的时间,而非当前时间
      -f,--file=日期文件            类似--date,从日期文件中按行读入时间描述
      -r, --reference=文件          显示文件指定文件的最后修改时间
      -R, --rfc-2822                以RFC 2822格式输出日期和时间
                                    例如:2006年8月7日,星期一 12:34:56 -0600
          --rfc-3339=TIMESPEC       以RFC 3339 格式输出日期和时间。
                                    TIMESPEC=`date',`seconds',或 `ns' 
                                    表示日期和时间的显示精度。
                                    日期和时间单元由单个的空格分开:
                                    2006-08-07 12:34:56-06:00
      -s, --set=字符串              设置指定字符串来分开时间
      -u, --utc, --universal        输出或者设置协调的通用时间
          --help            显示此帮助信息并退出
          --version         显示版本信息并退出

    给定的格式FORMAT 控制着输出,解释序列如下:

      %%    一个文字的 %
      %a    当前locale 的星期名缩写             (e.g., Sun)
      %A    当前locale 的星期名全称             (e.g., Sunday)
      %b    当前locale 的月名缩写                 (e.g., Jan)
      %B    当前locale 的月名全称                (e.g., January)
      %c    当前locale 的日期和时间              (e.g., Wed 22 Nov 2017 04:43:20 PM CST)
      %C    世纪;比如 %Y,通常为省略当前年份的后两位数字(例如:20)
      %d    按月计的日期(例如:01)
      %D    按月计的日期;等于%m/%d/%y                    e.g        11/22/17
      %e    按月计的日期,添加空格,等于%_d              
      %F    完整日期格式,等价于 %Y-%m-%d
      %g    ISO-8601 格式年份的最后两位 (参见%G)
      %G    ISO-8601 格式年份 (参见%V),一般只和 %V 结合使用
      %h    等于%b
      %H    小时(00-23)
      %I    小时(00-12)
      %c    按年计的日期(001-366)
      %k    时(0-23)
      %l    时(1-12)
      %m    月份(01-12)
      %M    分(00-59)
      %n    换行
      %N    纳秒(000000000-999999999)
      %p    当前locale 下的"上午"或者"下午",未知时输出为空
      %P    与%p 类似,但是输出小写字母
      %r    当前locale 下的 12 小时时钟时间 (如:11:11:04 下午)
      %R    24 小时时间的时和分,等价于 %H:%M
      %s    自UTC 时间 1970-01-01 00:00:00 以来所经过的秒数
      %S    秒(00-60)
      %t    输出制表符 Tab
      %T    时间,等于%H:%M:%S
      %u    星期,1 代表星期一
      %U    一年中的第几周,以周日为每星期第一天(00-53)
      %V    ISO-8601 格式规范下的一年中第几周,以周一为每星期第一天(01-53)
      %w    一星期中的第几日(0-6),0 代表周一
      %W    一年中的第几周,以周一为每星期第一天(00-53)
      %x    当前locale 下的日期描述 (如:12/31/99)
      %X    当前locale 下的时间描述 (如:23:13:48)
      %y    年份最后两位数位 (00-99)
      %Y    年份
      %z +hhmm              数字时区(例如,-0400)
      %:z +hh:mm            数字时区(例如,-04:00)
      %::z +hh:mm:ss        数字时区(例如,-04:00:00)
      %:::z                 数字时区带有必要的精度 (例如,-04,+05:30)
      %Z                    按字母表排序的时区缩写 (例如,EDT)




    时间设置:

       显示系统时间:date

       显示硬件时间 :
        hwclock --show 
        clock  

     


           Linux机器上的时间比较复杂,机器里有两个时钟,
    硬件时钟(Real Time Clock,简称RTC)从根本上讲是CMOS时钟。
    系统时钟  是由内核维护的。

              系统时间=内核时间            硬件时间=CMOS时钟

       

    在Linux下,默认情况下,系统时间和硬件时间,并不会自动同步。
    在Linux运行过程中,系统时间和硬件时间以异步的方式运行,互不干扰。
    硬件时间的运行,是靠Bios电池来维持。
    而系统时间,是用CPU tick来维持的。
    在系统开机的时候,会自动从Bios中取得硬件时间,设置为系统时间。

     

     

     

     


    设置系统时间 
    # date -s“20120101 10:19" (月/日/年 时:分:秒)

    系统时钟 写入 硬件时钟:
    # hwclock --systohc
    或者
    # clock --systohc

     

    设置硬件时间
    # hwclock --set --date="07/07/06 10:19" (月/日/年 时:分:秒)
    clock --set --date="07/07/06 10:19" (月/日/年 时:分:秒)

    硬件时钟 写入 系统时钟:
    # hwclock --hctosys
    或者
    # clock --hctosys
    上面命令中,--hctosys表示Hardware Clock to SYStem clock。


           为了保持系统时间与硬件时间的一致性,Linux每隔一段时间会将系统时间写入硬件。由于该同步是每隔一段时间(大约是11分钟)进行的,在执行完 date -s 命令后,如果马上重起系统,修改的时间就有可能没有被写入硬件。如果要确保修改生效,最好再使用 clock -w 这个命令将系统时间强行写入硬件。


    再来说下clock -w这个命令
     -w |  --systohc  set the hardware clock to the current system time  系统时间写入硬件时间 
             --systz      set the system time based on the current timezone  设置系统时间基于当前时区
    -s   | --hctosys   set the system time from the hardware clock           硬件时间设置入系统时间

    设置完系统时间后,还需要同步到硬件时钟上
    # clock --systohc

     


    时区:

    查看当前时区 
     date -R 

    选择时区
     tzselect 
    (tzselect命令用于选择时区。要注意的是tzselect只是帮我们把选择的时区显示出来,并不会实际生效,也就是说它仅仅告诉我们怎么样去设置环境变量TZ。)(TZ = Time Zone)

     

     

     

     

     

     

     

    更改时区 

    1. 直接更改,复制相应的时区文件,替换系统时区文件;或者创建链接文件  
                      cp /usr/share/zoneinfo/$主时区/$次时区  /etc/localtime  
                   在中国可以使用:  
                      cp /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime 

                  创建软连接
                 中国大陆 
                 ln -sf /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime 

       
    2. 如果不知道时区,使用刚才的tzselect命令查询
       最终系统会给出提示:
       You can make this change permanent for yourself by appending the line
      TZ='Asia/Shanghai'; export TZ
      to the file '.profile' in your home directory; then log out and log in again.

      Here is that TZ value again, this time on standard output so that you
      can use the /usr/bin/tzselect command in shell scripts:
      Asia/Shanghai

      进行下面的操作
      设定     TZ='Asia/Shanghai'; export TZ 
            # cp /usr/share/zoneinfo/$TZ  /etc/localtime 
                 重新启动或者运行时钟设置脚本使之发生作用 

       
    3. timeconfig可以直接更改时区
      我的centos不支持此命令,暂无数据。但是我强烈推荐使用此命令 
      如果没有timeconfig命令,可以通过yum安装timeconfig:
      yum install system-config-date 
      timeconfig是linux提供的一个图形化的配置根据,相对比较直观。
       



       
    4. 也可以通过网络确定时间
       在日期与时间设置工具对话框中的下部,有一个“启用网络时间协议”的选项,将该项选中就可以使用网络时间协议来同步Linux 系统时钟。选中该项后,其下面的服务器下拉列表框就变为可用状态,可从中选择一个时间服务器作为远程时间服务器。然后单击确定按钮,便可连接所设定的时间服务器,并与之同步时间。


    最后几点说明


     

    • 时间保存在硬件实时钟(RTC)中,RTC由主板电池供电,即使关断电源也不会造成时间丢失
    • 系统启动时从RTC获取时间,这个步骤在rc.sysinit中做
    • UTC为true表示RTC保存的时间是UTC时间,false表示保存的是本地时间
    • UTC是协调世界时UTC相当于本初子午线(即经度0度)上的平均太阳时,过去曾用格林威治平均时(GMT)来表示.北京时间比UTC时间早8小时
    • CST是美国中央时区的缩写。在部分unix操作系统版本里,有时也会代表China Standard Time,所以有时候会造成混淆


  • 相关阅读:
    eclipse
    7lession-基础数据使用介绍
    6lession-基本数据类型
    监听复选框
    arttemplate02
    最后判断权重总分
    ajax
    屏幕尺寸发生变化时页面自适应
    js获取url中的中文参数出现乱码
    js 为什么计算结果老是出现NaN
  • 原文地址:https://www.cnblogs.com/centos2017/p/7896832.html
Copyright © 2011-2022 走看看