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。