date命令的语法结构:
date [-d][时间运算] [+FORMAT]
先说简单的,[+FORMAT] 部分,主要有如下输出格式:
时间方面:
%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 #显示当前本地时间
2019年 01月 04日 星期五 15:54:38 CST
date -u #显示当前格林威治时间
2019年 01月 04日 星期五 08:05:29 UTC
date +'%Y-%m-%d'
2019-01-04
date +'%Y-%m-%d %T'
2019-01-04 16:06:40
date +'%F'
2019-01-04
date +'%y%m%d %H:%M:%S'
190104 16:08:17
date +'%w' #显示周几
5
date +'%W' #显示第几周
00
date +'%s' #显示时间戳
1546589343
时间运算部分:
date -d '-1 day'
date -d '-1 month'
date -d '-1 years'
date -d '-1 week'
date -d '-1 hour'
date -d '-1 minute'
date -d '-1 second'
使用date命令,对指定日期时间进行加减:
date -d '2018-12-25 +2 day' '+%F'
--
date -d '2018-12-25 +2 week' '+%F'
--
date -d '20181225 +2 week' '+%F'
--
date -d '181225 +2 week' '+%F'
--
虽然日期选择的格式不同,但是系统会自动识别。但是,对小时、分、秒进行加减,时间部分只能使用一种格式。
date -d '181225 10 +2hour' '+%F %T' -- :: date -d '20181225 10 +2hour' '+%F %T' -- :: date -d '2018-12-25 10 +2hour' '+%F %T' -- :: date -d '2018-12-25 10:25 +2hour' '+%F %T' -- :: #使用 小时:分:秒 的格式,计算出来的时间错误! date -d '2018-12-25 1025 +2hour' '+%F %T' -- :: date -d '2018-12-25 102530 +2hour' '+%F %T' date: 无效的日期"2018-12-25 102530 +2hour" #时间部分,只能到分钟,具体原因尚不清楚! date -d '2018-12-25 102530 +2 minute' '+%F %T' date: 无效的日期"2018-12-25 102530 +2 minute" #时间部分,只能到分钟,具体原因尚不清楚! date -d '2018-12-25 1025 +2 minute' '+%F %T' -- ::
变量引用:
在shell语法里,我们使用date命令可以表示任何我们需要的时间,那么,如何引用用date命令赋值的一个变量呢。
假设,变量d1=$(date -d '2018-12-25 1025 +2 minute' '+%F %T')
对变量d1的引用,不是直接写d1,而是${d1}
cww@cww-XPS--:~$ d1=$(date -d '2018-12-25 1025 +2 minute' '+%F %T')
cww@cww-XPS--:~$ echo d1
d1
cww@cww-XPS--:~$ echo ${d1}
-- ::