Linux date 命令详解

Bash Shell gongyj 1355℃ 已收录 0评论

在 linux 环境中,不管是编程还是其他维护,时间是必不可少的。在 shell 编程中,经常用到日期的加减运算,以前都是自己通过 expr 函数计算,很麻烦,其实 date 命令本身提供了日期的加减运算非常方便。熟练运用 date 命令来表示自己想要表示的时间,肯定可以给自己的工作带来诸多方便。

1.命令格式:

date [参数]… [+格式]

2、命令功能:

date 可以用来显示或设定系统的日期与时间。

3、命令参数:

-d, --date=STRING                    #显示 STRING 指定的时间
-f, --file=DATEFILE                  #类似 –date 参数显示 DATEFILE 文件中的每行时间
-r, --reference=FILE                 #显示文件的最后修改时间
-R, --rfc-2822                       #以 RFC-2822 兼容日期格式显示时间,例如:Mon, 23 Nov 2015 21:04:34 +0800
--rfc-3339=TIMESPEC                  #以RFC 3339 格式输出日期和时间。TIMESPEC='date','seconds',或 'ns' 表示日期和时间的显示精度。
-s, --set=STRING                     #设置时间为 STRING
-u, --utc, --universal               #显示或设定为 Coordinated Universal Time 时间格式

4、date 命令输出显示格式

%a           星期名缩写(Sun..Sat)
%A           星期的完整名称(Sunday..Saturday)
%b           月份的缩写(Jan..Dec)
%B           月份的完整名称(January..December)
%c           日期与时间(Sat 21 Nov 2015 10:06:00 PM CST)
%C           世纪(年份除100后去整)[00-99]
%d           日期(以01-31来表示)
%D           日期(mm/dd/yy)
%e           一个月的第几天(1..31)
%F           日期,同 %Y-%m-%d
%g           年份的最后两位数字(00-99)
%G           完整年份(0000-9999)
%h           同 %b
%H           小时(00..23)
%I           小时(01..12)
%j           一年的第几天(001..366)
%k           小时(0..23)
%l           小时(1..12)
%m           月份(01..12)
%M           分钟(00..59)
%n           换行
%N           纳秒(000000000..999999999)
%p           AM or PM
%P           am or pm
%r           12小时制时间(hh:mm:ss [AP]M)
%R           24小时制时间(hh:mm),同 %H:%M
%s           从 1970-01-01 00:00:00 UTC 开始的秒数
%S           秒(00..60)
%t           制表符
%T           24小时制时间,同 %H:%M:%S
%u           一周的第几天(1..7); 1 代表周一
%U           一年的第几周,周日为每周的第一天(00..53)
%V           一年的第几周,周一为每周的第一天(01..53)
%w           一周的第几天(0..6); 0 代表周日
%W           一年的第几周,周一为每周的第一天(00..53)
%x           日期(mm/dd/yy)
%X           时间(%H:%M:%S)
%y           年份(00..99)
%Y           年份(1970…)
%z           RFC-2822 风格数字格式时区(+0800)
%:z          +hh:mm 风格数字格式时区(+08:00)
%::z         +hh:mm:ss 风格数字格式时区(+08:00:00)
%:::z        数字时区:必要精度(+08, +09:30)
%Z           时区缩写字母(e.g., CST), 无法确定时区则为空

5、date 显示和设定系统时间与日期实验

(1)显示时间

[root@localhost ~]# date
2015年 10月 31日 星期六 15:17:48 CST
[root@localhost ~]# date +%c
2015年11月20日 星期六 15时18分03秒
[root@localhost ~]# date +%D
10/31/15
[root@localhost ~]# date +%x
2015年10月31日
[root@localhost ~]# date +%T
15:18:27
[root@localhost ~]# date +%X
15时18分33秒
[root@localhost ~]# date "+%H:%M:%S"
15:20:39
[root@localhost ~]# date "+%Y-%m-%d %H:%M:%S"
2015-10-31 15:21:43
[root@localhost ~]# date "+%Y_%m_%d %H:%M:%S"
2015_10_31 15:22:45
[root@localhost ~]# echo "2015-10-26 23:00:01" > date.txt
[root@localhost ~]# echo "2015/10/26 23:00:02" >> date.txt
[root@localhost ~]# date -f date.txt
2015年 10月 26日 星期一 23:00:01 CST
2015年 10月 26日 星期一 23:00:02 CST
[root@localhost ~]# date -R
Sat, 31 Oct 2015 15:22:55 +0800
[root@localhost ~]# date -I
2015-10-31
[root@localhost ~]# date -Ihours
2015-10-31T15+0800
[root@localhost ~]# date -Iminutes
2015-10-31T15:24+0800
[root@localhost ~]# date -Iseconds
2015-10-31T15:24:44+0800
[root@localhost ~]# date -u
2015年 10月 31日 星期六 07:26:19 UTC

(2)设定时间

date -s 20080523                      #设置成20080523,这样会把具体时间设置成空00:00:00
date -s 01:01:01                      #设置具体时间,不会对日期做更改
date -s "01:01:01 2015-06-23"         #这样可以设置全部时间
date -s "01:01:01 20150623"           #这样可以设置全部时间
date -s "01:01:01 06/23/15"           #这样可以设置全部时间
date -s "2015-06-23 01:01:01"         #这样可以设置全部时间
date -s "20150623 01:01:01"           #这样可以设置全部时间
date -s "06/23/15 01:01:01"           #这样可以设置全部时间

注意,这里说的是系统时间,是 Linux 由操作系统维护的。在系统启动时,Linux 操作系统将时间从 CMOS 中读到系统时间变量中,以后修改时间通过修改系统时间实现。如果要确保修改的硬件时间生效,需要使用命令 clock -w 把系统时间写入硬件,查看硬件时间使用 clock –show 命令。

(3)日期加减运算

date -d today                         #显示今天天日期和时间
date -d now                           #显示当前日期和时间
date -d tomorrow                      #显示明天这个时候的日期和时间
date -d yesterday                     #显示昨天这时候的日期和时间

date +%Y%m%d --date="-1 day"          #显示前一天的日期
date +%Y%m%d --date="1 days ago"
date +%Y%m%d --date="+1 day"          #显示后一天的日期
date +%Y%m%d --date="-1 days ago"
date +%Y%m%d --date="-1 week"         #显示上一周的日期
date +%Y%m%d --date="1 weeks ago"
date +%Y%m%d --date="7 days ago"
date +%Y%m%d --date="+1 week"         #显示下一周的日期
date +%Y%m%d --date="-1 weeks ago"
date +%Y%m%d --date="-7 days ago"
date +%Y%m%d --date="-1 month"        #显示上一月的日期,按30天计算
date +%Y%m%d --date="1 months ago"
date +%Y%m%d --date="30 days ago"
date +%Y%m%d --date="+1 month"        #显示下一月的日期
date +%Y%m%d --date="-1 months ago"
date +%Y%m%d --date="-30 days ago"
date +%Y%m%d --date="-1 year"         #显示前一年的日期
date +%Y%m%d --date="1 years ago"
date +%Y%m%d --date="+1 year"         #显示下一年的日期
date +%Y%m%d --date="-1 years ago"

date -d "sep 10" +%Y-%m-%d            #今年的 9 月 10 日是星期四
date -d "-3 day" +%Y-%m-%d            # 3 天前日期
date -d "3 day" +%Y-%m-%d             # 3 天后日期
date -d "2 week" +%Y-%m-%d           # 2 周后的日期
date -d next-day +%Y-%m-%d            #明天日期
date -d tomorrow +%Y-%m-%d            #明天日期
date -d last-day +%Y-%m-%d            #昨天日期
date -d yesterday +%Y-%m-%d           #昨天日期
date -d last-week +%Y-%m-%d           #一周前日期
date -d next-week +%Y-%m-%d           #一周后日期
date -d last-month +%Y-%m-%d          #一个月前日期
date -d next-month +%Y-%m-%d          #一个月后日期
date -d '50 days ago' +%Y-%m-%d       # 50 天前日期
date -d 'sep 10 -2 weeks'             #相对于 9 月 10 日这个日期的 2 周前日子

(4)日期与时间戳转换

在 shell 中,字符串转换为时间戳可以这样做:

date -d "2015-10-31 15:38:47" +%s

输出形式如下:

1446277127

其中,-d 参数表示显示指定的字符串所表示的时间,+%s 表示输出的时间戳。

而时间戳转换为字符串可以这样做:

date -d @1446277127

输出形式如下:

2015年 10月 31日 星期六 15:38:47 CST

如果要将时间戳转换成“yyyy-MM-dd HH:mm:ss”这种形式的时间,则这样做:

date -d "1970-01-01 UTC 1446277127 seconds" "+%F %T
本站文章如未注明,均为原创丨本网站采用BY-NC-SA协议进行授权,转载请注明转自:http://blog.chopmoon.com/favorites/232.html
喜欢 (0)
发表我的评论
取消评论

表情 代码 贴图 加粗 链接 私信 删除线 签到

Hi,请填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
正在加载中……