066 date命令

命令说明

date 显示或设置系统日期时间,支持丰富的格式化输出(+%Y-%m-%d 等),是脚本生成时间戳文件名、计算时间范围、做日志切割命名的必备工具。

语法

date [选项]... [+格式]
date -s 时间字符串  # 设置时间(需 root)

常用参数

参数说明
+%Y-%m-%d格式化输出:年-月-日;%H:%M:%S 时分秒,%F 等价 %Y-%m-%d,%T 等价 %H:%M:%S
-d 字符串显示指定日期而非当前,如 -d "2 days ago"、-d "2026-01-01"、-d next-friday
-s 字符串设置系统时间,如 -s "2026-09-16 08:00:00"(生产用 ntp/chrony 同步)
-r 文件显示文件最后修改时间
-u按 UTC 显示
+%s输出 Unix 时间戳(秒)
+%j / +%U / +%w年内第几天 / 第几周 / 星期几(0=周日)
--date="YYYY-MM-DD" 换算配合 +%s 做时间戳与日期互转

使用示例

$ date

显示当前日期时间

$ date +%F

输出 2026-09-16 样式日期

$ date "+%Y%m%d_%H%M%S"

脚本备份文件命名:backup_20260916_083000.tar.gz

$ date -d "yesterday" +%F

昨天的日期(日志切割常用)

$ date -d "3 hours ago"

3 小时前的时间

$ date -d @1700000000

时间戳转可读日期

$ date +%s

获取当前 Unix 时间戳

$ date -s "2026-10-01 00:00:00"

手动设置系统时间(临时校准)

$ TZ=Asia/Tokyo date

临时按指定时区显示

实用技巧

  • 脚本中时间戳文件名模板:$(date +%Y%m%d_%H%M%S),配合 logrotate 的 dateext 思路一致。
  • GNU date 的 -d 支持自然语言:"last Monday"、"25 December 2026"、"1 week"、"-90 days",做时间范围统计极方便。
  • 时间戳换算:date -d @秒 转日期;date -d "2026-01-01" +%s 转时间戳,日志分析常用。
  • 改时间优先 chrony/ntp 同步而非 date -s:手动改跳变会打断定时任务、证书校验与分布式一致性。
  • 时区问题:服务器默认 UTC、业务在东八区时,crontab 头部设 CRON_TZ=Asia/Shanghai(部分实现)或 TZ 变量;系统时区用 timedatectl set-timezone 修改。
  • BSD/macOS 的 date 语法不同(-v 代替 -d),跨平台脚本要判断 uname -s。