文章目录
- date 命令学习
- 1. 命令简介
- 2. 语法参数
- 2.1 使用语法
- 2.2 说明
- 2.3 参数说明
- 3. 使用案例
- :arrow_right: 星期名缩写 %a
- :arrow_right: 星期名全写 %A
- :arrow_right: 月名缩写 %b
- :arrow_right: 月名全称 %B
- :arrow_right: 日期和时间 %c
- :arrow_right: 世纪 %C
- :arrow_right: 按日计的日期 %d
- :arrow_right: 按日计的日期 %D
- :arrow_right: 按日计的日期 %e
- :arrow_right: 完整日期格式 %F
- :arrow_right: ISO-8601 格式年份的最后两位 %g
- :arrow_right: 显示月份 %h
- :arrow_right: 小时(00-23) %H
- :arrow_right: 小时(00-12) %I
- :arrow_right: 按年计的日期(001-366) %j
- :arrow_right: 小时,格式为( 0..23) %k
- :arrow_right: 小时,格式为 ( 1..12) %l
- :arrow_right: 月 (01..12) %m
- :arrow_right: 分钟 (00..59) %M
- :arrow_right: 纳秒 %N
- :arrow_right: 上午或者下午 %p %P
- :arrow_right: 显示文件最后修改时间
- :arrow_right: 12 小时时钟时间 %r
- :arrow_right: 24 小时时间的时和分 %R
- :arrow_right: 自UTC 时间 1970-01-01 00:00:00 以来所经过的秒数 %s
- :arrow_right: 秒(00-60) %S
- :arrow_right: 时间 %T
- :arrow_right: 星期 %u
- :arrow_right: 一年中的第几周 %U
- :arrow_right: ISO-8601 格式规范下的一年中第几周 %V
- :arrow_right: 一星期中的第几日 %w
- :arrow_right: 一年中的第几周 %W
- :arrow_right: 日期描述 %x
- :arrow_right: 时间描述 %X
- :arrow_right: 年份最后两位数位 %y
- :arrow_right: 年份 %Y
- :arrow_right: 数字时区 %z
- :arrow_right: 按字母表排序的时区缩写 %Z
date 命令学习
1. 命令简介
在显示方面使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记。在备份文件的时候我们常结合此命令生成当前日期和时间的文件名。格式符前面以
+
加号开头,若是不以加号作为开头,则表示要设定时间,而时间格式为MMDDhhmm[[CC]YY][.ss]
,其中MM
为月份,DD
为日,hh
为小时,mm
为分钟,CC
为年份前两位数字,YY
为年份后两位数字,ss
为秒数。
2. 语法参数
2.1 使用语法
用法:date [选项]... [+格式]或:date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] Display the current time in the given FORMAT, or set the system date.Mandatory arguments to long options are mandatory for short options too. -d, --date=STRING display time described by STRING, not 'now' -f, --file=DATEFILE like --date once for each line of DATEFILE -I[TIMESPEC], --iso-8601[=TIMESPEC] output date/time in ISO 8601 format.TIMESPEC='date' for date only (the default),'hours', 'minutes', 'seconds', or 'ns' for dateand time to the indicated precision. -r, --reference=文件 显示文件指定文件的最后修改时间 -R, --rfc-2822 以RFC 2822格式输出日期和时间例如:2006年8月7日,星期一 12:34:56 -0600--rfc-3339=TIMESPEC output date and time in RFC 3339 format.TIMESPEC='date', 'seconds', or 'ns' fordate and time to the indicated precision.Date and time components are separated bya single space: 2006-08-07 12:34:56-06:00 -s, --set=STRING set time described by STRING -u, --utc, --universal print or set Coordinated Universal Time (UTC)--help 显示此帮助信息并退出--version 显示版本信息并退出
2.2 说明
参数 | 说明 |
---|---|
-d, --date=STRING | 显示由STRING描述的时间,而不是“现在”,示例:date -d "-7 day" +%Y-%m-%d 显示七天前的日期 |
-f, --file=DATEFILE | 使用 -f 参数进行多行输出,示例:参考使用案例 |
-I[TIMESPEC] | ISO 8601格式的输出日期/时间,示例:参考使用案例 |
-r, --reference=文件 | 显示指定文件的最后修改时间,示例:参考使用案例 |
-R, --rfc-2822 | 以RFC 2822格式输出日期和时间,示例:参考使用案例 |
-s, --set=STRING | 设置系统时间 |
–version | 显示版本编号 |
-u, --utc, --universal | 打印或设置协调世界时(UTC) |
–help | 帮助 |
2.3 参数说明
使用格式:
date +[参数]
参数 | 说明 |
---|---|
%% | 输出结果为一个 % 字符 |
%a | 当前locale 的星期名缩写(例如: 日,代表星期日) |
%A | 当前locale 的星期名全称 (如:星期日) |
%b | 当前locale 的月名缩写 (如:一,代表一月) |
%B | 当前locale 的月名全称 (如:一月) |
%c | 当前locale 的日期和时间 (如:2005年3月3日 星期四 23:05:25) |
%C | 世纪;比如 %Y,通常为省略当前年份的后两位数字(例如:20) |
%d | 按日计的日期(例如:01) |
%D | 按日计的日期;等于%m/%d/%y |
%e | 按日计的日期,添加空格,等于%_d |
%F | 完整日期格式,等价于 %Y-%m-%d |
%g | ISO-8601 格式年份的最后两位 (参见%G) |
%G | ISO-8601 格式年份 (参见%V),一般只和 %V 结合使用 |
%h | 显示月份,等于%b |
%H | 小时(00-23) |
%I | 小时(00-12) |
%j | 按年计的日期(001-366) |
%k | 小时,格式为( 0…23); 和 %_H 相同 |
%l(小写L) | 小时,格式为 ( 1…12); 和 %_I(大写i) 相同 |
%m | 月 (01…12) |
%M | 分钟 (00…59) |
%n | 换行 |
%N | 纳秒(000000000-999999999) |
%p | 当前locale 下的"上午"或者"下午",未知时输出为空 |
%P | 与%p 类似,但是输出小写字母 |
%r | 当前locale 下的 12 小时时钟时间 (如:11:11:04 下午) |
%R | 24 小时时间的时和分,等价于 %H:%M |
%s | 自UTC 时间 1970-01-01 00:00:00 以来所经过的秒数 |
%S | 秒(00-60) |
%t | 输出制表符 Tab |
%T | 时间,等于%H:%M:%S |
%u | 星期,1 代表星期一 |
%U | 一年中的第几周,以周日为每星期第一天(00-53) |
%V | ISO-8601 格式规范下的一年中第几周,以周一为每星期第一天(01-53) |
%w | 一星期中的第几日(0-6),0 代表周一 |
%W | 一年中的第几周,以周一为每星期第一天(00-53) |
%x | 当前locale 下的日期描述 (如:12/31/99) |
%X | 当前locale 下的时间描述 (如:23:13:48) |
%y | 年份最后两位数位 (00-99) |
%Y | 年份 |
%z | 数字时区(例如,+0800) |
%😒 | 数字时区(例如,+08:00) |
%:😒 | 数字时区(例如,+08:00:00) |
%::😒 | 数字时区带有必要的精度 (例如,+08) |
%Z | 按字母表排序的时区缩写 (例如,CST) |
3. 使用案例
➡️ 星期名缩写 %a
[root@104 ~]# date +%a
二
➡️ 星期名全写 %A
[root@104 ~]# date +%A
星期二
➡️ 月名缩写 %b
[root@104 ~]# date +%b
1月
➡️ 月名全称 %B
[root@104 ~]# date +%B
一月
➡️ 日期和时间 %c
[root@104 ~]# date +%c
2024年01月09日 星期二 10时14分46秒
➡️ 世纪 %C
年份除100后去整
注:
date +%C
得到的结果通常为省略当前年份的后两位数字,示例:2024
年,得到的结果就是20
,但是 2024 年应该是 21 世纪,所以个人感觉这个参数没有太大的使用意义。
# 年份除100后去整
[root@104 ~]# date +%C
20
➡️ 按日计的日期 %d
[root@104 ~]# date +%d
09
➡️ 按日计的日期 %D
等于
date +%m/%d/%y
[root@104 ~]# date +%D
01/09/24
➡️ 按日计的日期 %e
添加空格,等于
%_d
,将09
中的0
换成了空格
[root@104 ~]# date +%e9
[root@104 ~]# date +%_d9
# 和 %d 类似
[root@104 ~]# date +%d
09
➡️ 完整日期格式 %F
完整日期格式,等价于
%Y-%m-%d
[root@104 ~]# date +%F
2024-01-09
➡️ ISO-8601 格式年份的最后两位 %g
ISO-8601 格式年份的最后两位 (参见%G)
ISO-8601 格式年份 (参见%V),一般只和 %V 结合使用
[root@104 ~]# date +%g
24
[root@104 ~]# date +%G
2024
➡️ 显示月份 %h
显示月份,等于
%b
[root@104 ~]# date +%h
1月
➡️ 小时(00-23) %H
[root@104 ~]# date +%H
16
➡️ 小时(00-12) %I
[root@104 ~]# date +%I
04
➡️ 按年计的日期(001-366) %j
[root@104 ~]# date +%j
009
➡️ 小时,格式为( 0…23) %k
小时,格式为( 0…23); 和 %_H 相同
[root@104 ~]# date +%k
16
[root@104 ~]# date +%_H
16
➡️ 小时,格式为 ( 1…12) %l
小时,格式为 ( 1…12); 和 %_I(大写i) 相同
[root@104 ~]# date +%l4
[root@104 ~]# date +%_I4
➡️ 月 (01…12) %m
和
date +%b
类似,date +%b
显示中文(一月)或者英文(Jan),date +%m
显示数字
[root@104 ~]# date +%m
01
➡️ 分钟 (00…59) %M
[root@104 ~]# date +%M
35
➡️ 纳秒 %N
纳秒(000000000-999999999)
[root@104 ~]# date +%N
595140186
➡️ 上午或者下午 %p %P
当前locale 下的"上午"或者"下午",未知时输出为空,中文模式下大写和小写
p
输出内容相同,英文模式下大写p
输出小写am
或者pm
,小写p
输出大写AM
或者AM
# 小写 p
[root@104 ~]# date +%p
下午
[root@104 ~]# date +%p
PM# 大写 p
[root@104 ~]# date +%P
下午
[root@104 ~]# date +%P
pm
➡️ 显示文件最后修改时间
显示指定文件的最后修改时间
[root@localhost data]# date -r test
2024年 04月 19日 星期五 09:51:47 CST
[root@localhost data]# touch a.txt test/
[root@localhost data]# date -r test
2024年 04月 19日 星期五 09:52:09 CST
- 扩展
使用
stat
命令:stat
命令可以显示文件属性的详细信息,比如最近一次访问和修改文件的时间、文件大小等信息,使用起来比较简单,命令后面只需要加上文件名就可以
[root@localhost data]# stat test/文件:"test/"大小:18 块:0 IO 块:4096 目录
设备:fd00h/64768d Inode:35280866 硬链接:2
权限:(0755/drwxr-xr-x) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2024-04-19 10:03:49.204293669 +0800
最近更改:2024-04-19 10:04:52.295859636 +0800
最近改动:2024-04-19 10:04:52.295859636 +0800
创建时间:-
➡️ 12 小时时钟时间 %r
当前locale 下的 12 小时时钟时间 (如:下午 04时41分13秒)
# 中文格式
[root@104 ~]# date +%r
下午 04时41分13秒# 英文格式
[root@105 ~]# date +%r
05:05:35 PM
➡️ 24 小时时间的时和分 %R
[root@104 ~]# date +%R
17:06
➡️ 自UTC 时间 1970-01-01 00:00:00 以来所经过的秒数 %s
可以通过这个时间来计算两个时间段之间的差值
[root@104 ~]# date +%s
1704791232# 计算分,时,日,年
[root@104 ~]# echo $(($(date +%s)/60/60/24/365))
54
# 计算月
[root@104 ~]# echo $((1704791232/60/60/24/365*12))
648# 计算时间段差值
[root@104 ~]# echo "BeginTime: "$(date +%s) && BeginTime=$(date +%s) && sleep 10 && echo "EndTime: "$(date +%s) && EndTime=$(date +%s) && echo "TimeDifference="$(($EndTime-$BeginTime))
BeginTime: 1704791895
EndTime: 1704791905
TimeDifference=10
➡️ 秒(00-60) %S
[root@104 ~]# date +%S
50
➡️ 时间 %T
当前时间,等于
%H:%M:%S
[root@104 ~]# date +%T
17:20:20
➡️ 星期 %u
星期,1 代表星期一
[root@104 ~]# date +%u
2
➡️ 一年中的第几周 %U
一年中的第几周,以周日为每星期第一天(00-53)
[root@104 ~]# date +%U
01
➡️ ISO-8601 格式规范下的一年中第几周 %V
ISO-8601 格式规范下的一年中第几周,以周一为每星期第一天(01-53),在国内使用时需要使用**以周一为每星期第一天**来计算,和
date +%W
结果相同
[root@104 ~]# date +%V
02
➡️ 一星期中的第几日 %w
一星期中的第几日(0-6),0 代表周一,和
date +%u
结果相同
[root@104 ~]# date +%w
2
➡️ 一年中的第几周 %W
一年中的第几周,以周一为每星期第一天(00-53),和
date +%V
结果相同
[root@104 ~]# date +%W
02
➡️ 日期描述 %x
# 中文格式
[root@104 ~]# date +%x
2024年01月09日# 英文格式
[root@105 ~]# date +%x
01/09/2024
➡️ 时间描述 %X
# 中文格式
[root@104 ~]# date +%X
17时31分30秒# 英文格式
[root@105 ~]# date +%X
05:31:28 PM
➡️ 年份最后两位数位 %y
年份最后两位数位 (00-99)
[root@105 ~]# date +%y
24
➡️ 年份 %Y
[root@104 ~]# date +%Y
2024
➡️ 数字时区 %z
[root@104 ~]# date +%z
+0800
[root@104 ~]# date +%:z
+08:00
[root@104 ~]# date +%::z
+08:00:00
[root@104 ~]# date +%:::z
+08
➡️ 按字母表排序的时区缩写 %Z
[root@104 ~]# date +%Z
CST