Linux date 命令:既能 显示 系统日期/时间,也能 设置 系统时钟;还能按任意 格式 输出,或 计算 时间差,是脚本与排障必备神器。


📌 基本语法

# 显示当前时间
date
# 设置时间(需 root)
sudo date MMDDhhmm[[CC]YY][.ss]

🧪 最常用的 10 个场景

需求

命令示例

默认格式

date

自定义格式

date '+%Y-%m-%d %H:%M:%S'

只显示日期

date +%F

只显示时间

date +%T

时间戳 → 日期

date -d '@1688200000'

日期 → 时间戳

date -d '2023-07-01 12:00' +%s

计算 1 天后

date -d '+1 day' '+%F %T'

计算 2 小时前

date -d '-2 hours' '+%F %T'

ISO-8601

date -Iseconds

文件时间戳

date -r /etc/passwd


⚙️ 格式占位符大全(区分大小写)

占位符

含义

示例

%Y

年 (4 位)

2025

%y

年 (2 位)

25

%m

月 (01-12)

08

%d

日 (01-31)

04

%H

小时 (00-23)

14

%M

分钟 (00-59)

30

%S

秒 (00-60)

45

%s

Unix 时间戳

1722862245

%F

等价 %Y-%m-%d

2025-08-04

%T

等价 %H:%M:%S

14:30:45

%A

星期全称

Monday

%Z

时区

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)

-d

-d / --date=

同 GNU

-r

读文件 mtime

同 GNU

-I

ISO-8601

macOS 需 date -u +"%Y-%m-%dT%H:%M:%SZ"


✅ 一句话速记

  • 显示date '+%F %T'
  • 计算date -d '+1 day'
  • 转换date -d '@1688200000'
  • 设置sudo date MMDDhhmmYYYY.ss

需要 crontab 里使用时间戳,或配合 TZ 变量切换时区示例吗?