前天在写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