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月份,0112
%d日期,0131
%H小时,0023
%M分钟,0059
%S
%sUnix 时间戳
%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'

参考资料