Linux 的 date 命令用来显示或设置系统的时间和日期。它主要用于通过时间日期格式化的转换,为一些脚本任务提供时间日期的数据。
语法
命令形式
date [OPTION]... [+FORMAT]
命令选项
- -d, --date=STRING
- 显示字符串指定的日期时间,如 now,yesterday,today,tomorrow 等。
- -f, --file=DATEFILE
- 类似 --date 选项,从日期描述文件中按行读取日期时间描述。
- -r, --reference=FILE
- 显示指定文件的最后修改日期时间。
- -R, --rfc-2822
- 以 RFC 2822 格式输出日期和时间,如 Sat, 13 Jun 2020 14:21:01 +0800。
- -s, --set=STRING
- 以字符串指定的描述设置日期时间。
- -u, --utc, --universal
- 显示或设置 UTC 时间(世界标准时间)。
- --help
- 显示帮助信息并退出。
- --version
- 显示版本信息并退出。
命令格式
FORMAT 即输出的格式,具体如下:
- %%
- 显示文本 %。
- %a
- 显示缩写形式的本地的星期信息(如,Sun)。
- %A
- 显示全写形式的本地的星期信息(如,Sunday)。
- %b
- 显示缩写形式的本地的月份信息(如,Jan)。
- %B
- 显示全写形式的本地的月份信息(如,January)。
- %c
- 显示本地的日期时间信息(如,六 6/13 15:00:25 2020)。
- %C
- 显示世纪信息,类似 %Y,但是它会去掉年份的后两位数字(如,20)。
- %d
- 显示月计的日期信息(如,01)。
- %D
- 显示日期信息,等同于 %m/%d/%y。
- %e
- 显示月计的日期信息,有空格间距,等同于%_d。
- %F
- 显示完整的日期信息,等同于%Y-%m-%d。
- %g
- 以 ISO 形式显示年份的最后两位信息(参见 %G)。
- %G
- 以 ISO 形式显示完整年份信息。
- %h
- 等同于 %b 。
- %H
- 24 进制的小时信息,范围从 00 到 23。
- %I
- 12 进制的小时信息,范围从 01 到 12。
- %j
- 以年计的天数信息,范围从 001 到 366。
- %k
- 24 进制的小时信息,个位数会去掉前置 0,范围从 0 到 23,等同于 %_H。
- %l
- 12 进制的小时信息,个位数会去掉前置 0,范围从 1 到 12,等同于 %_I。
- %m
- 月份信息,范围从 01 到 12。
- %M
- 分钟信息,范围从 00 到 59。
- %n
- 换行符。
- %N
- 纳秒信息,范围从 000000000 到 999999999。
- %p
- 显示 AM 或 PM 的本地信息,中文的话,显示 上午 或 下午。
- %P
- 等同于 %p,但是小写形式,但是对中文无作用,它会直接输出 P。
- %r
- 12 进制的本地时间信息,如 11:11:04 PM。
- %R
- 24 进制的小时分钟信息,等同于 %H:%M。
- %s
- 时间戳信息,自 UTC 时间 1970-01-01 00:00:00 以来的秒数。
- %S
- 秒数信息,范围从 00 到 60。
常用命令
显示当前的年月日信息:
[linux@Linux ~]$ date +%Y%m%d
20200613
[linux@Linux ~]$ date +%Y-%m-%d
2020-06-13
显示 n 天、n 星期、n 月、n 年的前后时间,示例如下:
[linux@Linux ~]$ date -d '2 day ago' # 2 天前
Thu Jun 11 16:16:20 CST 2020
[linux@Linux ~]$ date -d '-2 day ago' # 2 天后
Mon Jun 15 16:16:24 CST 2020
[linux@Linux ~]$ date -d '3 week ago' # 3 周前
Sat May 23 16:16:33 CST 2020
[linux@Linux ~]$ date -d '-3 week ago' # 3 周后
Sat Jul 4 16:16:40 CST 2020
[linux@Linux ~]$ date -d '4 month ago' # 4 个月前
Thu Feb 13 16:16:52 CST 2020
[linux@Linux ~]$ date -d '-4 month ago' # 4 个月后
Tue Oct 13 16:16:57 CST 2020
[linux@Linux ~]$ date -d '5 year ago' # 5 年前
Sat Jun 13 16:17:05 CST 2015
[linux@Linux ~]$ date -d '-5 year ago' # 5 年后
Fri Jun 13 16:17:08 CST 2025
获取昨天的日期
可以利用 -d 选项结合日期描述,有 3 种方式,具体如下:
$ date +%Y%m%d -d "-1 days"
20200925
另一种描述文案的方式如下:
$ date +%Y%m%d -d "1 day ago"
20200925
也等同于如下表达:
$ date +%Y%m%d -d "yesterday"
20200925
遍历日期范围
一般 t+1 的离线任务中,往往需要遍历一定时间范围内日期,然后将每天的日期作为参数或条件进行下一步操作。
假设从昨天往前推 7 天日期进行遍历,具体代码如下:
#! /bash/sh
for i in {1..7}
do
day=`date +%Y%m%d -d "-$i days"`
echo $day
done