Skip to content

Commit b2b841b

Browse files
authored
Update date.md
按照外部命令的格式(chmod.md)更新了文档格式及内容。
1 parent 78d8ce8 commit b2b841b

File tree

1 file changed

+118
-103
lines changed

1 file changed

+118
-103
lines changed

command/date.md

Lines changed: 118 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -3,168 +3,183 @@ date
33

44
显示或设置系统时间与日期
55

6-
## 补充说明
6+
## 概要
77

8-
**date命令** 是显示或设置系统时间与日期。
8+
```shell
9+
date [OPTION]... [+FORMAT]
10+
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
11+
```
912

10-
很多shell脚本里面需要打印不同格式的时间或日期,以及要根据时间和日期执行操作。延时通常用于脚本执行过程中提供一段等待的时间。日期可以以多种格式去打印,也可以使用命令设置固定的格式。在类UNIX系统中,日期被存储为一个整数,其大小为自世界标准时间(UTC)1970年1月1日0时0分0秒起流逝的秒数。
13+
## 主要用途
1114

12-
### 语法
15+
- 转换时间到选定的格式,默认为当前。
16+
- 设置系统时间。
1317

14-
```shell
15-
date(选项)(参数)
16-
```
18+
## 参数
1719

18-
### 选项
20+
format:输出的时间格式。
1921

2022
```shell
21-
-d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号;
22-
-s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号;
23-
-u:显示GMT;
24-
--help:在线帮助;
25-
--version:显示版本信息。
23+
format可用的转义序列如下:
24+
25+
%% 百分号
26+
%a 当地缩写的工作日名称(例如,Sun)
27+
%A 当地完整的工作日名称(例如,Sunday)
28+
%b 当地缩写的月份名称(例如,Jan)
29+
%B 当地完整的月份名称(例如,January)
30+
%c 当地的日期和时间(例如,Thu Mar 3 23:05:25 2005)
31+
%C 世纪,和%Y类似,但是省略后两位(例如,20)
32+
%d 一月中的一天(例如,01)
33+
%D 日期,等价于%m/%d/%y
34+
%e 一月中的一天,格式使用空格填充,等价于%_d
35+
%F 完整的日期;等价于%+4Y-%m-%d
36+
%g ISO标准计数周的年份的最后两位数字
37+
%G ISO标准计数周的年份,通常只对%V有用
38+
%h 等价于%b
39+
%H 小时,范围(00..23)
40+
%I 小时,范围(00..23)
41+
%j 一年中的一天,范围(001..366)
42+
%k 小时,使用空格填充,范围(0..23),等价于%_H
43+
%l 小时,使用空格填充,范围(1..12),等价于%_I
44+
%m 月,范围(01..12)
45+
%M 分钟,范围(00..59)
46+
%n 换行符
47+
%N 纳秒,范围(000000000..000000000)
48+
%p 用于表示当地的AM或PM,如果未知则为空白
49+
%P 类似于%p,但用小写表示
50+
%q 季度,范围(1..4)
51+
%r 当地以12小时表示的时钟时间(例如,11:11:04 PM)
52+
%R 24小时每分钟;等价于%H:%M
53+
%s 自协调世界时1970年01月01日00时00分以来的秒数
54+
%S 秒数,范围(00..60)
55+
%t 水平制表符
56+
%T 时间;等价于%H:%M:%S
57+
%u 一周中的一天(1..7),1代表星期一
58+
%U 一年中的第几周,周日作为一周的起始(00..53)
59+
%V ISO标准计数周,该方法将周一作为一周的起始(01..53)
60+
%w 一周中的一天(0..6),0代表星期天
61+
%W 一年中的第几周,周一作为一周的起始(00..53)
62+
%x 当地的日期表示(例如,12/31/99)
63+
%X 当地的时间表示(例如,23:13:48)
64+
%y 年份后两位数字,范围(00..99)
65+
%Y 年份
66+
%z +hhmm格式的数值化时区格式(例如,-0400)
67+
%:z +hh:mm格式的数值化时区格式(例如,-04:00)
68+
%::z +hh:mm:ss格式的数值化时区格式(例如,-04:00:00)
69+
%:::z 数值化时区格式,相比上一个格式增加':'以显示必要的精度(例如,-04,+05:30)
70+
%Z 时区缩写(如EDT)
71+
72+
默认情况下,日期用零填充数字字段;以下可选的符号可以跟在'%'后面:
73+
74+
- (连字符) 不要填充相应的字段。
75+
_ (下划线) 使用空格填充相应的字段。
76+
0 (数字0) 使用数字0填充相应的字段。
77+
+ 用数字0填充,未来年份大于4位数字则在前面加上'+'号。
78+
^ 允许的情况下使用大写。
79+
# 允许的情况下将默认的大写转换为小写,默认的小写转换为大写。
80+
81+
在任何标志之后都有一个可选的字段宽度,如小数;然后是一个可选的修饰符,在可用的情况下,使用E来使用当地语言环境的替代表示,
82+
使用O来使用当地语言环境的替代数字符号。
2683
```
2784

28-
### 参数
29-
30-
<+时间日期格式>:指定显示时使用的日期时间格式。
31-
32-
### 日期格式字符串列表
85+
## 选项
3386

3487
```shell
35-
%H # 小时,24小时制(00~23)
36-
%I # 小时,12小时制(01~12)
37-
%k # 小时,24小时制(0~23)
38-
%l # 小时,12小时制(1~12)
39-
%M # 分(00~59)
40-
%p # 显示出上午或下午
41-
%r # 时间,12小时制
42-
%s # 从1970年1月1日0点到目前经历的秒数
43-
%S # 秒(00~59)
44-
%T # 时间(24小时制)(hh:mm:ss)
45-
%X # 显示时间的格式(%H时%M分%S秒)
46-
%Z # 按字母表排序的时区缩写
47-
%a # 星期名缩写
48-
%A # 星期名全称
49-
%b # 月名缩写
50-
%B # 月名全称
51-
%c # 日期和时间
52-
%d # 按月计的日期(01~31)
53-
%D # 日期(mm/dd/yy)
54-
%h # 和%b选项相同
55-
%j # 一年的第几天(001~366)
56-
%m # 月份(01~12)
57-
%w # 一个星期的第几天(0代表星期天)
58-
%W # 一年的第几个星期(00~53,星期一为第一天)
59-
%x # 显示日期的格式(mm/dd/yy)
60-
%y # 年份的最后两个数字(1999则是99)
61-
%Y # 年份(比如1970、1996等)
62-
%C # 世纪,通常为省略当前年份的后两位数字
63-
%U # 一年中的第几周,以周日为每星期第一天
64-
%e # 按月计的日期,添加空格,等于%_d
88+
长选项与短选项等价
89+
90+
-d, --date=STRING 解析字符串并按照指定格式输出,字符串不能是'now'
91+
--debug 注释已解析的日期,并将有疑问的用法发送到标准错误。
92+
-f, --file=DATEFILE 类似于--date; 一次从DATEFILE处理一行。
93+
-I[FMT], --iso-8601[=FMT] 按照ISO 8601格式输出,FMT可以为'date'(默认),'hours''minutes''seconds''ns'
94+
例如:2006-08-14T02:34:56-06:00
95+
-R, --rfc-email 按照RFC 5322格式输出,例如: Mon, 14 Aug 2006 02:34:56 -0600
96+
--rfc-3339=FMT 按照RFC 3339格式输出,FMT可以为'date', 'seconds','ns'中的一个,
97+
例如:2006-08-14 02:34:56-06:00
98+
-r, --reference=FILE 显示文件的上次修改时间。
99+
-s, --set=STRING 根据字符串设置系统时间。
100+
-u, --utc, --universal 显示或设置世界协调时(UTC)。
101+
--help 显示帮助信息并退出。
102+
--version 显示版本信息并退出。
65103
```
66104

67-
### 实例
105+
## 返回值
68106

69-
格式化输出:
107+
返回状态为成功除非给出了非法选项或非法参数。
108+
109+
## 例子
70110

71111
```shell
112+
# 格式化输出:
72113
date +"%Y-%m-%d"
73114
2009-12-07
74-
```
75-
76-
输出昨天日期:
77115

78-
```shell
116+
# 输出昨天日期:
79117
date -d "1 day ago" +"%Y-%m-%d"
80118
2012-11-19
81-
```
82-
83-
2秒后输出:
84119

85-
```shell
120+
# 2秒后输出:
86121
date -d "2 second" +"%Y-%m-%d %H:%M.%S"
87122
2012-11-20 14:21.31
88-
```
89-
90-
传说中的 1234567890 秒:
91123

92-
```shell
93-
date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%m:%S"
124+
# 传说中的 1234567890 秒:
125+
date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%M:%S"
126+
# 或者
127+
date -d@1234567890 +"%F %T"
128+
# 输出结果
94129
2009-02-13 23:02:30
95-
```
96-
97-
普通转格式:
98130

99-
```shell
131+
# 时间格式转换:
100132
date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S"
133+
# 输出结果
101134
2009/12/12 00:00.00
102-
```
103-
104-
apache格式转换:
105135

106-
```shell
136+
# apache格式转换:
107137
date -d "Dec 5, 2009 12:00:37 AM" +"%Y-%m-%d %H:%M.%S"
138+
# 输出结果
108139
2009-12-05 00:00.37
109-
```
110140

111-
格式转换后时间游走:
112-
113-
```shell
141+
# 格式转换后时间游走:
114142
date -d "Dec 5, 2009 12:00:37 AM 2 year ago" +"%Y-%m-%d %H:%M.%S"
143+
# 输出结果
115144
2007-12-05 00:00.37
116-
```
117145

118-
加减操作:
119-
120-
```shell
121-
date +%Y%m%d # 显示前天年月日
146+
# 时间加减操作:
147+
date +%Y%m%d # 显示年月日
122148
date -d "+1 day" +%Y%m%d # 显示前一天的日期
123149
date -d "-1 day" +%Y%m%d # 显示后一天的日期
124150
date -d "-1 month" +%Y%m%d # 显示上一月的日期
125151
date -d "+1 month" +%Y%m%d # 显示下一月的日期
126152
date -d "-1 year" +%Y%m%d # 显示前一年的日期
127153
date -d "+1 year" +%Y%m%d # 显示下一年的日期
128-
```
129154

130-
设定时间:
131-
132-
```shell
155+
# 设定时间:
133156
date -s # 设置当前时间,只有root权限才能设置,其他只能查看
134-
date -s 20120523 # 设置成20120523,这样会把具体时间设置成空00:00:00
157+
date -s 20120523 # 设置成20120523,这样会把具体时间设置成00:00:00
135158
date -s 01:01:01 # 设置具体时间,不会对日期做更改
136159
date -s "01:01:01 2012-05-23" # 这样可以设置全部时间
137160
date -s "01:01:01 20120523" # 这样可以设置全部时间
138161
date -s "2012-05-23 01:01:01" # 这样可以设置全部时间
139162
date -s "20120523 01:01:01" # 这样可以设置全部时间
140-
```
141-
142-
有时需要检查一组命令花费的时间,举例:
143-
144-
```shell
145-
#!/bin/bash
146163

164+
# 有时需要检查一组命令花费的时间:
147165
start=$(date +%s)
148166
nmap wangchujiang.com &> /dev/null
149-
150167
end=$(date +%s)
151168
difference=$(( end - start ))
169+
# 显示执行时间
152170
echo $difference seconds.
153-
```
154171

155-
当你考虑输出带有时间的字符串时,例如(Current time: 2019/05/19):
156-
157-
最常用的方法:
158-
159-
```shell
172+
# 当你考虑输出带有时间的字符串时,例如(Current time: 2019/05/19):
173+
# 通常使用的方法:
160174
echo "Current time: $(date +"%Y/%m/%d")"
161-
```
162-
163-
另一种方法:
164-
```shell
175+
# 另一种方法:
165176
suffix='Current time:'
166-
#和echo的用法差不多,注意如果换成单引号就不能替换变量了。
177+
# 注意如果换成单引号就不能替换变量了。
167178
date +"${suffix} %Y/%m/%d"
168179
```
169180

181+
### 注意
182+
183+
1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 date``info coreutils 'date invocation'`
184+
170185
<!-- Linux命令行搜索引擎:https://jaywcjlove.github.io/linux-command/ -->

0 commit comments

Comments
 (0)