命令简介
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中,登陆后即可使用。