date 命令

date 命令可以用来显示或设定系统的日期与时间。

语法

date [OPTION]... [+FORMAT]

date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]

可选参数

  • -d, --date=STRING:通过字符串显示时间格式,字符串不能是'now'。
  • -f, --file=DATEFILE:类似于--date; 一次从 DATEFILE 处理一行。
  • -I[FMT], --iso-8601[=FMT]:按照 ISO 8601 格式输出时间,FMT 可以为'date'(默认),'hours','minutes','seconds','ns'。 可用于设置日期和时间的精度,例如:2006-08-14T02:34:56-0600。
  • -R, --rfc-2822 : 按照 RFC 5322 格式输出时间和日期,例如: Mon, 14 Aug 2006 02:34:56 -0600。
  • --rfc-3339=FMT:按照 RFC 3339 格式输出,FMT 可以为'date', 'seconds','ns'中的一个,可用于设置日期和时间的精度, 例如:2006-08-14 02:34:56-06:00。
  • -r, --reference=FILE:显示文件的上次修改时间。
  • -s, --set=STRING:根据字符串设置系统时间。
  • -u, --utc, --universal:显示或设置协调世界时(UTC)。
  • --help:显示帮助信息。

FORMAT参数

FORMAT指定时间显示格式,其中可用的标记列表如下:

%%   输出字符 %

%a   星期几的缩写 (Sun..Sat)

%A   星期的完整名称(Sunday..Saturday)。

%b   缩写的月份名称(例如,Jan)

%B   完整的月份名称(例如,January)

%c   本地日期和时间(例如:2023年04月19日 星期三 09时22分19秒)

%C   世纪,实际世纪需+1(例如,20表示的是21世纪)

%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   本地的日期格式(例如,12/31/99)

%X   本地的日期格式(例如,23:13:48)

%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)

若是不以加号作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss],其中 MM 为月份,DD 为日,hh 为小时,mm 为分钟,CC 为年份前两位数字,YY 为年份后两位数字,ss 为秒数。

当您不希望出现无意义的 0 时(比如说 1999/03/07),则可以在标记中插入 - 符号,比如说 date '+%-H:%-M:%-S' 会把时分秒中无意义的 0 给去掉,如09:01:04 会显示为9:1:4。

实例

显示当前时间:

# date

2023年 04月 19日 星期三 09:23:31 CST  //不指定格式时会使用系统的本地时间格式,如英语国家可能是Tue May 24 09:29:43 CST 2022

# date '+%c'

2023年 04月 19日 星期三 09:23:31 CST //同默认格式

# date '+%D' //显示日期,格式为dd/MM/yy

05/24/22

# date '+%x' //显示日期,格式为本地日期格式

2023年04月19日

# date '+%T' //显示时间部分,格式为HH:mm:ss

09:18:32

# date '+%X' //显示时间部分,格式为本地时间格式

09时18分39秒


指定格式输出:

# date +"%Y-%m-%d"

2023-04-19

输出昨天日期:

# date -d "1 day ago" +"%Y-%m-%d"

2023-04-18

时间格式转换:

# date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S"

2009/12/12 00:00.00

显示时间与日期分行显示

$ date '+%T%n%D'  //%n换行符

09:46:26
04/19/23

时间加减操作:

date +%Y%m%d                   # 显示年月日

date -d "+1 day" +%Y%m%d       # 显示后一天的日期

date -d "-1 day" +%Y%m%d       # 显示前一天的日期

date -d "-1 month" +%Y%m%d     # 显示上一月的日期

date -d "+1 month" +%Y%m%d     # 显示下一月的日期

date -d "-1 year" +%Y%m%d      # 显示前一年的日期

date -d "+1 year" +%Y%m%d      # 显示下一年的日期

设定时间:

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"     # 这样可以设置全部时间

需要区分的是date显示和设置的都是系统时间,区分于硬件时钟时间,设置系统时间并不会同步到硬件时钟



相关命令:




返回软件开发辅助网 | 常用命令列表

shell语法手册