前天在寫shell腳本的時候,遇到時間計算的問題,搞明白之後想要些個總結;
date命令可以用來顯示或設定系統的日期與時間,使用者設定想要顯示的格式;
常用參數說明:
參數 | 作用 |
---|---|
-d | 顯示所設定的時間 |
-s | 將系統時間設爲指定的時間 |
-u | 顯示目前的格林威治時間 |
–version | 顯示版本號 |
一、顯示
1.顯示系統當前時間
[root@redhat_192.168.0.12 14:27:21 ~]#date
2019年 09月 29日 星期日 14:27:24 CST
2.格式化顯示系統當前時間
[root@redhat_192.168.0.12 14:27:24 ~]# date '+%Y-%m-%d %H:%M:%S'
2019-09-29 14:28:57
3.顯示昨天時間
[root@redhat_192.168.0.12 14:28:57 ~]#date -d 'yesterday' '+%Y-%m-%d %H:%M:%S'
2019-09-28 14:29:45
或
[root@redhat_192.168.0.12 14:29:45 ~]#date -d '-1 days' '+%Y-%m-%d %H:%M:%S'
2019-09-28 14:30:16
4.顯示明天時間
[root@redhat_192.168.0.12 14:30:16 ~]#date -d 'tomorrow' '+%Y-%m-%d %H:%M:%S'
2019-09-30 14:31:19
或
[root@redhat_192.168.0.12 14:31:19 ~]#date -d '1 days' '+%Y-%m-%d %H:%M:%S'
2019-09-30 14:31:43
或
[root@redhat_192.168.0.12 14:31:43 ~]#date -d '+1 days' '+%Y-%m-%d %H:%M:%S'
2019-09-30 14:32:01
5.顯示一個小時前的時間
[root@redhat_192.168.0.12 14:33:08 ~]#date -d '-1 hours' '+%Y-%m-%d %H:%M:%S'
2019-09-29 13:33:56
6.顯示一個小時後的時間
[root@redhat_192.168.0.12 14:33:56 ~]#date -d '1 hours' '+%Y-%m-%d %H:%M:%S'
2019-09-29 15:34:33
7.顯示一分鐘前的時間
[root@redhat_192.168.0.12 14:35:02 ~]#date -d '-1 minutes' '+%Y-%m-%d %H:%M:%S'
2019-09-29 14:34:08
8顯示一分鐘後的時間
[root@redhat_192.168.0.12 14:35:08 ~]#date -d '1 minutes' '+%Y-%m-%d %H:%M:%S'
2019-09-29 14:37:01
9.顯示三小時前,一分鐘之後的時間
[root@redhat_192.168.0.12 14:36:01 ~]#date -d '-3 hour 1 minute' '+%Y-%m-%d %H:%M:%S'
2019-09-29 11:37:44
10.顯示當前日期和所設定的時間
[root@redhat_192.168.0.12 14:40:44 ~]#date --date '12:34:56'
2019年 09月 29日 星期日 12:34:56 CST
或
[root@redhat_192.168.0.12 14:42:29 ~]#date -d '12:34:56'
2019年 09月 29日 星期日 12:34:56 CST
二、修改當前系統的日期和時間
1.只修改日期
[root@redhat_192.168.0.12 14:43:28 ~]#date -s '20190708'
2019年 07月 08日 星期一 00:00:00 CST
2.只修改時間
[root@redhat_192.168.0.12 00:00:00 ~]#date -s '20:14:45'
2019年 07月 08日 星期一 20:14:45 CST
3.修改日期和時間
[root@redhat_192.168.0.12 20:14:45 ~]#date -s '2019-09-29 14:53:01'
2019年 09月 29日 星期日 14:53:01 CST
補充:在修改日期的時候,20190929相當於2019-09-29
三、將時間轉換爲秒數
linux下時間是從1970.1.1開始算的秒數
1.將當前時間轉換爲秒數
[root@redhat_192.168.0.12 14:53:01 ~]#date +%s
1569740109
2.將指定的時間轉換爲秒數
[root@redhat_192.168.0.12 14:55:09 ~]#date +%s -d '2004/06/04 20:30:00'
1086352200
3.將指定的秒數轉換爲時間
[root@redhat_192.168.0.12 14:56:31 ~]#date -d @1569740109
2019年 09月 29日 星期日 14:55:09 CST
或
[root@redhat_192.168.0.12 15:03:10 ~]#date -d @1569740109 +"%Y-%m-%d %H:%M:%S"
2019-09-29 14:55:09
四、時間計算
時間加減
1.計算時間加上n小時n分鐘n秒
思路:將基礎的時間轉換爲時間戳,然後將需要加上的時間轉換爲秒數,兩者相加,再將相加後得到的結果轉換爲時間
實例:
計算:2019-09-29 23:50:10加上時間1小時59分鐘30秒
計算過程:
a.將2019-09-29 23:50:10轉換爲時間戳,1小時59分鐘30秒轉換爲秒數
[root@redhat_192.168.0.12 15:36:29 ~]#time1=($(date +%s -d '2019-09-29 23:50:10'))
[root@redhat_192.168.0.12 15:37:12 ~]#time2=$[1*3600+59*60+30]
b.將time1與time2的值相加
[root@redhat_192.168.0.12 15:41:22 ~]#time3=$[${time1}+${time2}]
[root@redhat_192.168.0.12 15:41:36 ~]#echo ${time3}
1569779380
c.將相加後所得的結果轉換爲時間
[root@redhat_192.168.0.12 15:43:09 ~]#date -d @1569779380 '+%Y-%m-%d %H:%M:%S'
2019-09-30 01:49:40