文章目录
- 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