Linux命令之date、clock、hwclock、cal
 
一、date命令
简单查看date命令的帮助信息
 [root@localhost ~]# date --help

基本用法:
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

常用参数注解 
  -d,--date 
  显示指定字符串所描述的时间,而非当前时间
          
  -f,--file=日期文件           
  类似--date,从日期文件中按行读入时间描述

  -r, --reference=文件
  显示文件指定文件的最后修改时间
        
  -s, --set=字符串
  设置指定字符串来分开时间
             
  -u, --utc, --universal
  输出或者设置协调的通用时间       


日期格式化字符串列表:

  %H : 小时(00..23)
  %I : 小时(01..12)
  %k : 小时(0..23)
  %l : 小时(1..12)
  %M : 分钟(00..59)
  %p : 显示本地 AM 或 PM
  %r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
  %s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
  %S : 秒(00..61)
  %T : 直接显示时间 (24 小时制)
  %X : 相当于 %H:%M:%S
  %Z : 显示时区 %a : 星期几 (Sun..Sat)
  %A : 星期几 (Sunday..Saturday)
  %b : 月份 (Jan..Dec)
  %B : 月份 (January..December)
  %c : 直接显示日期与时间
  %d : 日 (01..31)
  %D : 直接显示日期 (mm/dd/yy)
  %h : 同 %b
  %j : 一年中的第几天 (001..366)
  %m : 月份 (01..12)
  %U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)
  %w : 一周中的第几天 (0..6)
  %W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
  %x : 直接显示日期 (mm/dd/yy)
  %y : 年份的最后两位数字 (00.99)
  %Y : 完整年份 (0000..9999)


简单实例:
格式化输出:
date +"%Y-%m-%d"
2015-08-21
输出昨天日期:
date -d "1 day ago" +"%Y-%m-%d"
2015-08-20
2秒后输出: date -d "2 second" +"%Y-%m-%d %H:%M.%S"
2015-08-21 10:05.49
传说中的 1234567890 秒:
date -d "1980-01-01 1234567890 seconds" +"%Y-%m-%d %H:%m:%S"
2019-02-13 23:02:30
普通转格式:
date -d "2015-08-08" +"%Y/%m/%d %H:%M.%S"
2015/08/08 00:00.00

加减操作:
date +%Y%m%d //显示当前年月日
20150821
date -d "+1 day" +%Y%m%d //显示后一天的日期
20150822
date -d "-1 day" +%Y%m%d //显示前一天的日期
20150820
date -d "-1 month" +%Y%m%d //显示上一月的日期
20150721
date -d "+1 month" +%Y%m%d //显示下一月的日期
20150921
date -d "-1 year" +%Y%m%d //显示前一年的日期
20140821
date -d "+1 year" +%Y%m%d //显示下一年的日期
20160821

设定时间:
date -s //设置当前时间,只有root权限才能设置,其他只能查看
date -s 20160823 //设置成20120523,这样会把具体时间设置成空00:00:00
date -s 01:01:01 //设置具体时间,不会对日期做更改
date -s "01:01:01 2016-08-23" //这样可以设置全部时间
date -s "01:01:01 20150823" //这样可以设置全部时间
date -s "2015-08-21 01:01:01" //这样可以设置全部时间
date -s "20150821 01:01:01" //这样可以设置全部时间

二、clock与hwclock命令
    clock命令,与hwclock命令是同一个命令,主要用来查询和设置硬件时钟(query and set the hardware clock (RTC))。RTC=Real Time Clock,也就是硬件时钟。
    在Linux中有硬件时钟与系统时钟等两种时钟。
    硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟。
    系统时钟则是指kernel中的时钟。
  
简单查看clock帮助信息
    [root@localhost ~]#clock help
    hwclock - query and set the hardware clock (RTC) //第一行就说明了与hwclock是同一个命令
    用法: hwclock [function] [options...]

    常用的参数有以下:
    -r, --show         读取并打印硬件时钟(read hardware clock and print result )
    -s, --hctosys      将硬件时钟同步到系统时钟(set the system time from the hardware clock )
    -w, --systohc     将系统时钟同步到硬件时钟(set the hardware clock to the current system time )
示例: 显示硬件时钟
    [root@localhost ~]# hwclock
    2015年08月21日 星期五 18时42分07秒  -0.986791 seconds
    [root@localhost ~]# hwclock -r
    2015年08月21日 星期五 18时42分29秒  -0.425118 seconds
    [root@localhost ~]# hwclock --show
    2015年08月21日 星期五 18时42分50秒  -0.376585 seconds

示例: 修改日期并同步到硬件时钟
[root@localhost ~]# date
2015年 08月 21日 星期五 10:45:19 CST
[root@localhost ~]# date 11062112   //格式 mmddHHMM,即 月日时分 ,注:这里故意修改了时间
2015年 11月 06日 星期五 21:12:00 CST
执行以下命令进行时间同步
[root@localhost ~]# hwclock -w
[root@localhost ~]# hwclock
2015年11月06日 星期五 21时14分13秒  -0.610420 seconds

注:系统时间准确,最好还是使用ntp服务进行同步
示例:使用ntpdate命令从网络同步时间,再同步到硬件时钟
ntpdate命令是使用NTP协议来从网络同步时间的命令
NTP=Network Time Protocol 网络时间协议
[root@localhost ~]# ntpdate -u 202.112.10.36
21 Aug 11:01:14 ntpdate[2533]: step time server 202.112.10.36 offset -6690347.700246 sec
[root@localhost ~]# date /注:上面已经做了修改
2015年 08月 21日 星期五 11:01:18 CST
[root@localhost ~]# hwclock -w  /系统时间同步到硬件时间

三、cal日历

   查看cal命令简单帮助信息
   [root@localhost ~]# man cal
   用法:cal [参数][月份][年份]
   常用参数:
   -1 显示一个月的月历
   -3 显示系统前一个月,当前月,下一个月的月历
   -s  显示星期天为一个星期的第一天,默认的格式
   -m 显示星期一为一个星期的第一天

示例
   显示当前月份日历
   [root@localhost ~]# cal
      八月 2015    
日 一 二 三 四 五 六
                   1
 2  3  4  5  6  7  8
 9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

  指定月份日历
  [root@localhost ~]# cal 9 2015
      九月 2015    
日 一 二 三 四 五 六
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

   显示全年日历
[root@localhost ~]# cal 2015
                               2015                              

        一月                   二月                   三月       
日 一 二 三 四 五 六   日 一 二 三 四 五 六   日 一 二 三 四 五 六
             1  2  3    1  2  3  4  5  6  7    1  2  3  4  5  6  7
 4  5  6  7  8  9 10    8  9 10 11 12 13 14    8  9 10 11 12 13 14
11 12 13 14 15 16 17   15 16 17 18 19 20 21   15 16 17 18 19 20 21
18 19 20 21 22 23 24   22 23 24 25 26 27 28   22 23 24 25 26 27 28
25 26 27 28 29 30 31                          29 30 31

        四月                   五月                   六月       
日 一 二 三 四 五 六   日 一 二 三 四 五 六   日 一 二 三 四 五 六
          1  2  3  4                   1  2       1  2  3  4  5  6
 5  6  7  8  9 10 11    3  4  5  6  7  8  9    7  8  9 10 11 12 13
12 13 14 15 16 17 18   10 11 12 13 14 15 16   14 15 16 17 18 19 20
19 20 21 22 23 24 25   17 18 19 20 21 22 23   21 22 23 24 25 26 27
26 27 28 29 30         24 25 26 27 28 29 30   28 29 30
                       31
        七月                   八月                   九月       
日 一 二 三 四 五 六   日 一 二 三 四 五 六   日 一 二 三 四 五 六
          1  2  3  4                      1          1  2  3  4  5
 5  6  7  8  9 10 11    2  3  4  5  6  7  8    6  7  8  9 10 11 12
12 13 14 15 16 17 18    9 10 11 12 13 14 15   13 14 15 16 17 18 19
19 20 21 22 23 24 25   16 17 18 19 20 21 22   20 21 22 23 24 25 26
26 27 28 29 30 31      23 24 25 26 27 28 29   27 28 29 30
                       30 31
        十月                  十一月                 十二月      
日 一 二 三 四 五 六   日 一 二 三 四 五 六   日 一 二 三 四 五 六
             1  2  3    1  2  3  4  5  6  7          1  2  3  4  5
 4  5  6  7  8  9 10    8  9 10 11 12 13 14    6  7  8  9 10 11 12
11 12 13 14 15 16 17   15 16 17 18 19 20 21   13 14 15 16 17 18 19
18 19 20 21 22 23 24   22 23 24 25 26 27 28   20 21 22 23 24 25 26
25 26 27 28 29 30 31   29 30                  27 28 29 30 31