Linux常用命令-date

命令

date

描述

print or set the system date and time
显示或设置系统时间和日期

用法

1
2
date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Options:
-d STRING 显示字符串描述的时间,如-3days,1week,'20200515 10:20:00'
-f DATEFILE 等同于-d,指定时间文件,按行分隔
-I[TIMESPEC] 按ISO-8601格式显示,TIMESPEC=date(默认),hours,minutes,seconds,ns
-r FILE 显示文件的mtime
-s STRING 设置时间
-u, --utc 显示或设置utc时间
--rfc-2822 显示格式为Mon, 07 Aug 2006 12:34:56 -0600
--rfc-3339=TIMESPEC 显示格式为2006-08-07 12:34:56-06:00, TIMESPEC=date,seconds,ns

+FORMAT: 注意起始要有一个+号,如+%T

%g ISO年数后两位,配合%V使用
%G ISO年数,配合%V使用
%y 年的后两位(00..99)
%Y 年(如2020)
%C 世纪,即%Y的前两位(如20)

%b 月份缩写(如Jan)
%B 月份全称(如January)
%m 月份(01..12)

%d 天,填充0(如01)
%e 天,填充空格,等同于%_d
%j 一年中的第几天(001..366)
%p 显示AM或PM,大写
%P 显示am或pm,小写

%a 周缩写(如Sun)
%A 周全称(如Sunday)
%u 一周中的第几天(1..7),1表示周一Monday
%w 一周中的第几天(0..6),0表示周日Sunday
%U 一年中的第几周,周日为一周的第一天(00..53)
%W 一年中的第几周,周一为一周的第一天(00..53)
%V ISO周数,周一为一周的第一天(01..53)

%H 小时,24h(00..23)
%I 小时,12h(01..12)
%k 小时,24h,空格填充( 0..23),等同于%_H
%l 小时,12h,空格填充( 1..12),等同于%_I

%M 分钟(00..59)

%N 纳秒(000000000..999999999)
%s 秒,从1970-01-01 00:00:00 UTC开始计算
%S 秒(00..60)
其他
%c 日期和时间(如Thu Mar 3 23:05:25 2005)
%D 日期,格式为%m/%d/%y
%F 日期,格式为%Y-%m-%d
%x 日期(如12/31/99) --此选项有bug显示的年是4位
%r 12h时间(如11:11:04 PM)
%R 24h时间,格式为%H:%M
%T 24h时间,格式为%H:%M:%S
%X 时间(如23:13:48) --此选项有bug显示结果和%r是一样的
%% 显示%号
%n 换行
%t tab键
%z 时区,格式为+hhmm(如-0400)
%:z 时区,格式为+hh:mm(如-04:00)
%::z 时区,格式为+hh:mm:ss(如-04:00:00)
%:::z 时区(如-04, +05:30)
%Z 时区缩写(如EDT)

默认使用数字0填充补位,还可以使用如下字符填充
- 连字符,表示不填充do not pad the field
_ 下划线,表示填充空格
0 数字0,表示填充0
^ 使用大写
# 相反,即小写变大写,大写变小写

注意

根据当前系统的语言环境显示的时间格式可能有所差异

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# 指定相对时间
$ date -d '-3days'
Wed Feb 17 14:54:08 CST 2021
$ date -d '1week'
Sat Feb 27 14:54:19 CST 2021
# 指定具体时间
$ date -d '20200515 10:20:00'
Fri May 15 10:20:00 CST 2020
$ more timefile
-10day
-1hour
15min
-10day5hour
20200305
$ date
Sat Feb 20 15:02:06 CST 2021
# 批量转换时间
$ date -f timefile
Wed Feb 10 15:02:08 CST 2021
Sat Feb 20 14:02:08 CST 2021
Sat Feb 20 15:17:08 CST 2021
Wed Feb 10 20:02:08 CST 2021
Thu Mar 5 00:00:00 CST 2020
$ date -Iminutes
2021-02-20T16:32+0800
$ date -Is
2021-02-20T16:32:08+0800
# -r查看文件的mtime
$ date -Is -r a
2021-02-19T20:01:59+0800
$ stat a
Access: 2021-02-19 21:21:24.997739029 +0800
Modify: 2021-02-19 20:01:59.914229808 +0800
Change: 2021-02-19 20:14:18.951921569 +0800
$ date
Sat Feb 20 16:34:42 CST 2021
# 查看utc时间
$ date -u
Sat Feb 20 08:34:44 UTC 2021
# 设置时间
$ date -s 17:00
Sat Feb 20 17:00:00 CST 2021
# 设置日期和时间
$ date -s '20200130 18:30'
Thu Jan 30 18:30:00 CST 2020
# 查看指定时区的时间
# 通过/usr/share/zoninfo目录查找到的夏威夷时区HST
$ TZ='US/Hawaii' date
Fri Feb 19 22:44:17 HST 2021
# 通过tzselect查找到的夏威夷时区HST
$ TZ='Pacific/Honolulu' date
Fri Feb 19 22:44:20 HST 2021
# 支持同时指定时区+指定时间
$ TZ="America/Los_Angeles" date
Sat Feb 20 00:54:05 PST 2021
$ date -d 'TZ="America/Los_Angeles" 09:00 next Fri'
Sat Feb 27 01:00:00 CST 2021
# 指定显示格式
# 显示日期和时间
$ date '+%F %T'
2021-02-20 16:56:06
$ date "+%Y%m%d-%T"
20210220-16:56:52
$ date '+%Y%m%d-%H%M%S'
20210220-165827
# 显示12h时间
$ date '+%r'
04:58:59 PM
# 显示今年的第几周
$ date '+%G%V'
202107