date - 显示和转换日期时间
date 用于显示、格式化和解析日期时间。本文示例采用 GNU Coreutils 的 date,其他系统的选项可能不同。
常用参数
-d STRING、--date=STRING:显示由字符串描述的时间,不修改系统时钟。-u、--utc:使用 UTC。-r FILE、--reference=FILE:显示文件最后修改时间。-I[FORMAT]、--iso-8601[=FORMAT]:使用 ISO 8601 格式输出。
修改系统时间的 -s、--set 需要相应权限,并可能影响日志、证书验证和定时任务;日常查询不应使用。
常用输出格式
| 格式 | 含义 |
|---|---|
%F | 日期,等同于 %Y-%m-%d |
%T | 时间,等同于 %H:%M:%S |
%Y | 四位年份 |
%m | 月份,01 至 12 |
%d | 日期,01 至 31 |
%H | 小时,00 至 23 |
%M | 分钟,00 至 59 |
%S | 秒 |
%s | Unix 时间戳 |
%u | 星期,1 表示星期一,7 表示星期日 |
%w | 星期,0 表示星期日,6 表示星期六 |
%z | 数字时区偏移,如 +0800 |
%Z | 时区缩写 |
%% | 百分号 |
显示日期时间
date
date '+%F %T'
date --iso-8601=seconds
date -u '+%F %T UTC'日期计算
# 昨天
date -d 'yesterday' '+%F'
# 10 天前
date -d '10 days ago' '+%F'
# 10 天后
date -d '10 days' '+%F'自然语言日期解析受本地环境和输入歧义影响。自动化脚本中优先使用明确的 ISO 日期、时区和格式。
Unix 时间戳转换
# 当前 Unix 时间戳
date '+%s'
# 时间戳转换为本地时间
date -d '@1629251288' '+%F %T %z'
# 明确时区的日期转换为时间戳
date -d '2021-08-18 09:48:08 +0800' '+%s'文件时间
# 显示文件最后修改时间
date -r filename '+%F %T %z'