命令簡介
date命令的功能是顯示或設置系統時間與日期。很多shell腳本里面需要打印不同格式的時間或日期,以及要根據時間和日期執行操作。延時通常用於腳本執行過程中提供一段等待的時間。日期可以用多種格式去打印,也可以使用命令設置固定的格式。在類UNIX系統中,日期被存儲爲一個整數,其大小爲自世界標準時間(UTC)1970年1月1日0時0分0秒起流逝的秒數。
命令格式
date 以系統默認格式顯示當前系統的時間
[root@myhosy ~]# date
Tue Mar 5 09:54:56 CST 2019
date 格式化顯示日期(以+開頭,引號內再接你想要的日期格式字符串列表)
[root@myhosy ~]# date "+%F"
2019-03-05
命令參數
-d:顯示由datestr所描述日期或時間。
-s:根據datestr來設置日期或時間。datestr前後必須加上雙引號;
-u: universal顯示GMT;
–help:在線幫助;
–version:顯示版本信息。
日期格式字符串列表
- %H 小時,24小時制(00~23) ##常用
- %I 小時,12小時制(01~12)
- %k 小時,24小時制(0~23)
- %l 小時,12小時制(1~12)
- %M 分鐘(00~59) ##常用
- %p 顯示出AM或PM
- %r 顯示時間,12小時制(%H:%M:%S %p)04:34:41 PM
- %s 從1970年1月1日00:00:00到目前經歷的秒數1524559123
- %S 顯示秒(00~59) ##常用
- %T 顯示時間,24小時制(%H:%M:%S)16:35:29
- %X 顯示時間的格式(%H:%M:%S)04:34:41 PM
- %Z 顯示時區,日期域(CST)
- %a 星期的簡稱(Sun~Sat)Tue
- %A 星期的全稱(Sunday~Saturday)Tuesday
- %h或%b 月的簡稱(Jan~Dec)Apr
- %B 月的全稱(January~December)April
- %c 日期和時間(Tue 24 Apr 2018 04:40:23 PM CST)
- %d 一個月的第幾天(01~31) ##常用
- %x年月日(mm/dd/yyyy)04/24/2018
- %D年月日(mm/dd/yy)04/24/18
- %j 一年的第幾天(001~366)
- %m 月份(01~12) ##常用
- %w一個星期的第幾天(0代表星期天)
- %W 一年的第幾個星期(00~53,星期一爲第一天)
- %y 年的最後兩個數字(2018則是18)
- %Y年的四個數字(2018則是2018) ##常用
- %F 年月日(yyyy-mm-dd)2018-04-24 ##常用
實戰演練及總結
以系統默認格式打印當前日期或時間
[root@myhost ~]# date
Tue Mar 5 10:13:49 CST 2019
[root@myhost ~]# echo ` date `
Tue Mar 5 10:13:50 CST 2019
[root@myhost ~]# echo $(date)
Tue Mar 5 10:14:06 CST 2019
以yyyy-mm-dd格式打印當前日期或時間
[root@myhost ~]# date +%F
2019-03-05
[root@myhost ~]# date +"%F"
2019-03-05
[root@myhost ~]# echo ` date +%F `
2019-03-05
[root@myhost ~]# echo $(date +%F)
2019-03-05
以yyyy-mm-dd HH:MM:SS格式打印當前日期或時間
[root@myhost ~]# date +"%F\ %H:%M:%S"
2019-03-05 10:17:04
[root@myhost ~]# date +"%Y-%m-%d\ %H:%M:%S"
2019-03-05 10:20:56
輸出前幾天的日期
[root@myhost ~]# date +%Y-%m-%d -d "2 day ago"
2019-03-03
[root@myhost ~]# date +%Y-%m-%d --date="2 day ago"
2019-03-03
[root@myhost ~]# date +%F -d "2 day ago"
2019-03-03
[root@myhost ~]# date +%F --date="2 day ago"
2019-03-03
輸出3小時前的日期或時間
[root@myhost~]# date +"%Y-%m-%d %H:%M:%S" -d "3 hour ago"
2019-03-05 07:28:45
[root@myhost~]# date +"%Y-%m-%d %H:%M:%S" --date="3 hour ago"
2019-03-05 07:31:41
輸出20秒後的日期或時間
[root@myhost~]# date +"%Y-%m-%d %H:%M:%S" -d "20 second"
2019-03-05 10:32:49
[root@myhost~]# date +"%Y-%m-%d %H:%M:%S" --date="20 second"
2019-03-05 10:32:58
傳說中的 1234567890 秒
[root@myhost ~]# date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%m:%S"
2009-02-13 23:02:30
普通轉格式化
[root@myhost ~]# date -d "2009-12-12" +"%Y/%m/%d %H:%M:%S"
2009/12/12 00:00:00
[root@myhost ~]# date -d "2009-12-12" +"%s"
1260547200
apache日期時間格式轉換
[root@myhost ~]# date -d "Dec 5, 2009 12:00:37 AM" +"%Y-%m-%d %H:%M:%S"
2009-12-05 00:00:37
[root@myhost ~]# date -d "Dec 5, 2009 12:00:37 AM" +"%s"
1259942437
格式轉換後時間遊走
[root@myhost ~]# date -d "Dec 5, 2018 12:00:37 AM 2 year ago" +"%Y-%m-%d %H:%M:%S"
2016-12-05 00:00:37
[root@myhost ~]# date -d "Dec 5, 2018 12:00:37 AM 2 year ago" +"%s"
1480867237
把時間轉成秒數
[root@myhost ~]# date
Tue Mar 5 14:41:54 CST 2019
[root@myhost ~]# date +%s
1551768131
[root@myhost ~]# date -d "Tue Mar 5 14:41:54 CST 2019" +%s
1551768114
把秒數轉換成標準時間格式
[root@myhost ~]# date -d '1970-1-1 0:0:0 GMT + 1551768114 seconds'
Tue Mar 5 14:41:54 CST 2019
[root@myhost ~]# date -d @1551768114
Tue Mar 5 14:41:54 CST 2019
[root@myhost ~]# date -d @1551768114 +%F
2019-03-05
時間加減操作
date +%Y%m%d #顯示當天年月日
date +%Y%m%d-d "+1 day" #顯示後一天的日期
date +%Y%m%d -d "-1 day" #顯示前一天的日期
date +%Y%m%d -d "+1 month" #顯示下一月的日期
date +%Y%m%d -d "-1 month" #顯示上一月的日期
date +%Y%m%d -d "+1 year" #顯示下一年的日期
date +%Y%m%d -d "-1 year" #顯示前一年的日期
設定時間
date -s #設置當前時間,只有root權限才能設置,其他只能查看
date -s 20120523 #設置日期爲20120523,設置時分秒成空00:00:00
date -s 01:01:01 #設置時分秒時間,不會對日期做更改
date -s "01:01:01 2012-05-23" #這樣可以設置日期+時分秒
date -s "01:01:01 20120523" #這樣可以設置日期+時分秒
date -s "2012-05-23 01:01:01" #這樣可以設置設置日期+時分秒
date -s "20120523 01:01:01" #這樣可以設置設置日期+時分秒
拓展
有時需要檢查一組命令花費的時間
#!/bin/bash
source /etc/profile
#define variables
start=`date +"%s" `
#start your command
ll /home
end=`date +"%s" `
#let span=end-start
#span=$((end-start))
#span=($end-$start)
echo $span seconds.
如何進行兩個整數相加?更多參考:
https://blog.csdn.net/yuki5233/article/details/84848834
建議使用別名簡化並轉換成我們熟悉的時間格式
alias d=' date +"%F %T" '
[root@myhost ~]# date +"%F %T"
2019-03-05 14:48:34
[root@myhost ~]# d
2019-03-05 14:48:34
alias d=' date +"%F %T" -d '
[root@myhost ~]# date +"%F %T" -d @1551768114
2019-03-05 14:41:54
[root@myhost ~]#dd @1551768114
2019-03-05 14:41:54
最後可以把這兩個alias語句放入.bash_profile中,登陸後即可使用。