date 命令用于打印或设置系统日期和时间。
# 显示当前日期时间
$ date
Fri Jan 9 17:10:15 CST 2026
如果提供的参数以 + 开头,date 会以该参数定义的格式(类似于 strftime 函数的格式)打印当前日期和时间(或由 --date 选项指定的日期和时间)。格式字符串中除了以 % 开头的转换说明符外,其他字符会保持不变。
$ date "+%Y-%m-%d %H:%M:%S"
2026-01-09 17:12:03
$ date '+周末愉快,今天是%F'
周末愉快,今天是2026-01-10
时间转换说明符
| 说明符 |
描述 |
备注 |
%H |
小时,24 小时制(00…23) |
|
%I |
小时,12 小时制(01…12) |
|
%k |
小时,24 小时制,空格填充(0…23) |
等同于 %_H,GNU 扩展 |
%l |
小时,12 小时制,空格填充(1…12) |
等同于 %_I,GNU 扩展 |
%M |
分钟(00…59) |
|
%N |
纳秒(000000000…999999999) |
GNU 扩展 |
%p |
本地环境的 AM/PM 对应表示(如AM或PM) |
中午视为PM,午夜视为AM |
%P |
类似 %p,但为小写 |
GNU 扩展 |
%r |
本地环境的 12 小时制时间(如,11:11:04 PM) |
|
%R |
24 小时制的小时和分钟,等同于 %H:%M |
|
%s |
自纪元(1970-01-01 00:00 UTC)以来的秒数 |
通常不计算闰秒,GNU 扩展 |
%S |
秒(00…60) |
若支持闰秒,可能为60 |
%T |
24 小时制的小时、分钟、秒,等同于 %H:%M:%S |
|
%X |
本地环境的时间表示(如,23:13:48) |
|
%z |
4 位数字时区(如-0600或+0530),不可确定时为-0000 |
数值偏移为零且缩写以-开头,则视为不可确定 |
%:z |
带冒号的数字时区(如-06:00或+05:30) |
不可确定时为-00:00,GNU 扩展 |
%::z |
带冒号、精确到秒的数字时区(如-06:00:00) |
不可确定时为-00:00:00,GNU 扩展 |
%:::z |
带冒号、最小精度的数字时区(如-06或+05:30) |
不可确定时为-00,GNU 扩展 |
%Z |
字母时区缩写(如CST) |
不可确定时为空 |
日期转换说明符
| 说明符 |
描述 |
备注 |
%a |
本地环境的缩写星期名(如Sun) |
|
%A |
本地环境的完整星期名,长度可变(如Sunday) |
|
%b |
本地环境的缩写月份名(如Jan) |
|
%B |
本地环境的完整月份名,长度可变(如January) |
|
%c |
本地环境的日期和时间(如Thu Mar 3 23:05:25 2020) |
|
%C |
世纪(年份的前两位数字),如2019→20 |
通常至少两位 |
%d |
月份中的日期,两位数(01…31) |
|
%D |
日期,等同于 %m/%d/%y |
在非美国地区易混淆 |
%e |
月份中的日期,空格填充,等同于 %_d |
|
%F |
ISO 8601 完整日期,如%Y-%m-%d |
标准格式,易于排序 |
%g |
ISO 周数对应的年份,不含世纪(00…99) |
同%y,但可能跨年,有歧义 |
%G |
ISO 周数对应的完整年份 |
通常与 %V 一起使用 |
%h |
同 %b |
|
%j |
年份中的日期(001…366) |
|
%m |
月份(01…12) |
|
%q |
季度(1…4) |
|
%u |
星期几(星期一=1,1…7) |
|
%U |
年份周数,以周日为一周起始(00…53) |
|
%V |
ISO 周数,以周一为一周起始(01…53) |
|
%w |
星期几(周日=0,0…6) |
|
%W |
年份周数,以周一为一周起始(00…53) |
|
%x |
本地环境的日期表示(如12/31/99) |
有歧义 |
%y |
年份最后两位(00…99) |
有歧义 |
%Y |
完整年份,至少 4 位(如0000,2024) |
年份0000在0001之前 |
字面量转换说明符
| 说明符 |
描述 |
%% |
一个百分号字面量 |
%n |
换行符 |
%t |
水平制表符 |
填充与标志
默认行为:数字字段默认用零左填充(如月份%m输出01)。例外:纳秒(%N)右填充,纪元秒(%s)不填充。
| 标志 |
描述 |
备注 |
- |
不填充该字段 |
GNU 扩展。%-N自适应精度 |
_ |
用空格填充 |
GNU 扩展 |
0 |
用零填充 |
|
+ |
用零填充,且年份/世纪数过大时前缀+ |
支持 ISO 8601 未来日期 |
^ |
尽可能使用大写字母 |
GNU 扩展 |
# |
尽可能使用相反的大小写 |
GNU 扩展 |
修饰符(用于%后):
E:使用本地环境的替代日期/时间表示(适用于%c, %C, %x, %X, %y, %Y)。
O:使用本地环境的替代数字符号(适用于数字说明符)。
注意:POSIX 仅对 %C、%F、%G、%Y(无修饰符时)的标志和字段宽度有明确规定。其他组合均为 GNU 扩展。
实用示例
显示日期时间
date "+%Y-%m-%d %H:%M:%S"
# 或
date "+%F %T"
2026-01-09 18:13:21
仅显示日期
date "+%Y-%m-%d"
# 或
date "+%F"
2026-01-09
仅显示时间
date "+%H:%M:%S"
# 或
date "+%T"
18:13:21
显示月份名称
date +"%B" # 完整月份
January
date +"%b" # 缩写月份
Jan
自定义中文格式
date +"%Y年%m月%d日 %H时%M分%S秒"
2026年01月09日 17时31分56秒
参考资料
[1] date: _https://www.gnu.org/software/coreutils/manual/html_node/date-invocation.html_
希望这篇关于 date 命令的详细指南能帮助你更好地在 Linux 环境中处理时间日期。如果你想了解更多关于系统管理或编程的基础知识,欢迎访问云栈社区进行交流和学习。
|