本文介绍Linux的date命令的用法。
Linux的date命令可以显示或设置系统的日期与时间。在写脚本时,经常会需要创建带日期的文件或者文件夹,此时date就非常有用。
- date [OPTION]... [+FORMAT]
- date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]
选项
- %% 输出字符 %
- %a 星期几的缩写 (Sun..Sat)
- %A 星期的完整名称(Sunday..Saturday)。
- %b 缩写的月份名称(例如,Jan)
- %B 完整的月份名称(例如,January)
- %c 本地日期和时间(例如,Thu Mar 3 23:05:25 2005)
- %C 世纪,和%Y类似,但是省略后两位(例如,20)
- %d 日 (01..31)
- %D 日期,等价于%m/%d/%y
- %e 一月中的一天,格式使用空格填充,等价于%_d
- %F 完整的日期;等价于 %Y-%m-%d
- %g ISO 标准计数周的年份的最后两位数字
- %G ISO 标准计数周的年份,通常只对%V有用
- %h 等价于 %b
- %H 小时 (00..23)
- %I 小时 (01..12)
- %j 一年中的第几天 (001..366)
- %k 小时,使用空格填充 ( 0..23); 等价于 %_H
- %l 小时, 使用空格填充 ( 1..12); 等价于 %_I
- %m 月份 (01..12)
- %M 分钟 (00..59)
- %n 新的一行,换行符
- %N 纳秒 (000000000..999999999)
- %p 用于表示当地的AM或PM,如果未知则为空白
- %P 类似 %p, 但是是小写的
- %r 本地的 12 小时制时间(例如 11:11:04 PM)
- %R 24 小时制 的小时与分钟; 等价于 %H:%M
- %s 自 1970-01-01 00:00:00 UTC 到现在的秒数
- %S 秒 (00..60)
- %t 插入水平制表符 tab
- %T 时间; 等价于 %H:%M:%S
- %u 一周中的一天 (1..7); 1 表示星期一
- %U 一年中的第几周,周日作为一周的起始 (00..53)
- %V ISO 标准计数周,该方法将周一作为一周的起始 (01..53)
- %w 一周中的一天(0..6),0代表星期天
- %W 一年中的第几周,周一作为一周的起始(00..53)
- %x 本地的日期格式
- %X 本地的日期格式
- %y 年份后两位数字 (00..99)
- %Y 年
- %z +hhmm 格式的数值化时区格式(例如,-0400)
- %:z +hh:mm 格式的数值化时区格式(例如,-04:00)
- %::z +hh:mm:ss格式的数值化时区格式(例如,-04:00:00)
- %:::z 数值化时区格式,相比上一个格式增加':'以显示必要的精度(例如,-04,+05:30)
- %Z 时区缩写 (如 EDT)
默认情况下,日期用零填充数字字段;以下可选的符号可以跟在'%'前面:
作用 | 命令 | 结果 |
默认的输出 | date | 2023年 04月 11日 星期二 19:11:20 CST |
输出日期和时间 | date +"%F_%T" | 2023-04-11_19:11:20 |
本地日期和时间 | date +"%c" | 2023年04月11日 星期二 19时11分48秒 |
显示日期(年份只输出后2位) | date +"%D" | 04/11/23 |
显示完整日期 | date +"%x" | 2023年04月11日 |
显示24小时的时间格式 | date +"%T" | 19:11:20 |
显示本地24小时的时间格式 | date +"%X" | 09时15分01秒 |
作用 | 命令 | 结果 |
输出年月日时分秒 | date +"%Y%m%d_%H%M%S" | 20230411_195048 |
输出年月日 | date +"%Y%m%d" | 20230411 |
日期格式转换 | date -d "2009-12-12" +"%Y/%m/%d %H:%M:%S" | 2009/12/12 00:00:00 |
日期时间格式转换 | date -d "2009-12-12 14:23:35" +"%Y/%m/%d %H:%M:%S" | 2009/12/12 14:23:35 |
apache格式转换 | date -d "Dec 5, 2009 10:23:37 AM" +"%Y-%m-%d %H:%M:%S" | 2009-12-05 10:23:37 |
如下时间加减适用于所有字段:year、month、day、hour、minute、second。
作用 | 命令 | 结果 |
输出后一天的时间 | date -d "+1 day" +"%Y%m%d_%H%M%S" 或者: date -d "+1 days" +"%Y%m%d_%H%M%S" 或者: date -d tomorrow +"%Y%m%d_%H%M%S" 或者: date -d "-1 day ago" +"%Y%m%d_%H%M%S" 或者 date -d "next day" +"%Y%m%d_%H%M%S" |
20230412_190602 (今天是2023 04 11) |
输出前2小时的时间 | date -d "-2 hour" +"%Y%m%d_%H%M%S" 或者: date -d "-2 hours" +"%Y%m%d_%H%M%S" 或者: date -d "2 hour ago" +"%Y%m%d_%H%M%S" |
20230411_170527 |
输出前1小时的时间 | date -d "last hour" +"%Y%m%d_%H%M%S" | 20230411_180527 |
往前1个月零1天 | date -d "1 month ago 1 day ago" +"%Y%m%d_%H%M%S" | 20230310_190527 |
指定日期的加减 | date -d "2023-03-20 -2 day" +"%F_%T" | 2023-03-18_00:00:00 |
只有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" |
设置日期和时间 |
1.检查一组命令花费的时间
- start=$(date +%s)
- nmap wangchujiang.com &> /dev/null
- end=$(date +%s)
- difference=$(( end - start ))
- # 显示执行时间
- echo $difference seconds.
2.输出带有时间的字符串
- # 通常使用的方法(必须是双引号,单引号不能替换变量):
- echo "Current time: $(date +"%Y/%m/%d")"