实战

date                              # 当前时间(系统格式)
# Fri May  9 10:23:45 UTC 2026

date -u                           # UTC
date +%Y-%m-%d                    # 2026-05-09
date +%F                          # 同上简写
date +%T                          # 10:23:45
date +'%Y-%m-%d %H:%M:%S'         # 2026-05-09 10:23:45
date +%s                          # Unix 时间戳

常用格式符

符号 含义
%Y 4 位年(2026)
%m 月(01-12)
%d 日(01-31)
%H 24 小时制时
%M
%S
%F %Y-%m-%d 简写
%T %H:%M:%S 简写
%s Unix 时间戳
%j 一年里第几天
%A %a 星期全称 / 缩写
%B %b 月全称 / 缩写
%Z 时区

时间计算

date -d "1 day ago"
date -d "1 week ago"
date -d "2 hours ago"
date -d "tomorrow"
date -d "next monday"
date -d "2026-12-31 + 7 days"

# 配格式
date -d "1 day ago" +%F
# 2026-05-08

时间戳互转

# 从时间戳转
date -d "@1747000000"
date -d "@$(date +%s)"

# 从字符串转时间戳
date -d "2026-05-09 10:23:45" +%s

设系统时间

sudo date -s "2026-05-09 10:00:00"

# 更现代的做法:用 NTP 同步
sudo timedatectl set-ntp true
timedatectl                      # 看时间同步状态

看 / 改时区

timedatectl                      # 综合
ls /etc/localtime                # 软链到时区文件
sudo timedatectl set-timezone Asia/Shanghai
sudo timedatectl set-timezone UTC

# 看支持的时区
timedatectl list-timezones | grep Asia

实战

# 生成带日期的备份文件名
backup_file="db-$(date +%F-%H%M).sql"

# 一小时内的日志(cron 调度后看)
date -d "1 hour ago" +%Y-%m-%dT%H:%M

# 看几个时区的当前时间
TZ=UTC date
TZ=America/New_York date

  • macOS 的 date -d 语法不同(用 -v)—— 跨平台脚本要小心
  • 服务器默认时区可能是 UTC——日志时间和你本地不一致很常见
  • %s 时间戳无时区——所有人都用同一个