Linux date
命令:既能 显示 系统日期/时间,也能 设置 系统时钟;还能按任意 格式 输出,或 计算 时间差,是脚本与排障必备神器。
📌 基本语法
# 显示当前时间
date
# 设置时间(需 root)
sudo date MMDDhhmm[[CC]YY][.ss]
🧪 最常用的 10 个场景
需求 | 命令示例 |
默认格式 |
|
自定义格式 |
|
只显示日期 |
|
只显示时间 |
|
时间戳 → 日期 |
|
日期 → 时间戳 |
|
计算 1 天后 |
|
计算 2 小时前 |
|
ISO-8601 |
|
文件时间戳 |
|
⚙️ 格式占位符大全(区分大小写)
占位符 | 含义 | 示例 |
| 年 (4 位) | 2025 |
| 年 (2 位) | 25 |
| 月 (01-12) | 08 |
| 日 (01-31) | 04 |
| 小时 (00-23) | 14 |
| 分钟 (00-59) | 30 |
| 秒 (00-60) | 45 |
| Unix 时间戳 | 1722862245 |
| 等价 | 2025-08-04 |
| 等价 | 14:30:45 |
| 星期全称 | Monday |
| 时区 | CST |
🛠️ 设置系统时间(root 权限)
# 一次性设置 2024-12-31 23:59:30
sudo date 123123592024.30# 与 NTP 服务器同步(推荐)
sudo ntpdate ntp.aliyun.com
在 systemd 系统上,更推荐
timedatectl set-time '2024-12-31 23:59:30'
或启用 NTP 同步。
🎯 脚本实战
1. 生成文件名
logfile="backup_$(date +%F_%H-%M-%S).tar.gz"
tar czf "$logfile" /etc
2. 计算两日期差(单位:秒)
start=$(date -d '2023-01-01' +%s)
end=$(date -d '2023-12-31' +%s)
echo $(( (end-start)/(3600*24) )) # 365 天
3. 循环等待到指定时间
target=$(date -d '18:00' +%s)
now=$(date +%s)
sleep $(( target - now ))
🧩 跨平台注意
功能 | GNU/Linux (coreutils) | macOS (BSD) |
|
| 同 GNU |
| 读文件 mtime | 同 GNU |
| ISO-8601 | macOS 需 |
✅ 一句话速记
- 显示:
date '+%F %T'
- 计算:
date -d '+1 day'
- 转换:
date -d '@1688200000'
- 设置:
sudo date MMDDhhmmYYYY.ss
需要 crontab
里使用时间戳,或配合 TZ
变量切换时区示例吗?