date 是檢視與設定系統時間的標準工具,支援豐富的格式化字串、相對日期運算、時區處理。本文詳解 30+ 格式化代碼、權限區分、三大實戰場景與腳本整合範例。
date、date +FORMAT)date -s STRING)| 選項 | 功能 |
|---|---|
-s, --set=STRING | 設定系統時間 |
-d, --date=STRING | 顯示指定字串描述的時間(非設定) |
-u, --utc | 顯示/設定 UTC 時間 |
-R, --rfc-2822 | RFC 2822 格式(郵件標準) |
-I, --iso-8601 | ISO 8601 格式 |
--reference=FILE | 顯示檔案最後修改時間 |
date +FORMAT)| 代碼 | 含義 | 範例 |
|---|---|---|
%H | 時 (00-23) | 14 |
%I | 時 (01-12) | 02 |
%k | 時 (0-23, 無前導零) | 14 |
%l | 時 (1-12, 無前導零) | 2 |
%M | 分 (00-59) | 30 |
%S | 秒 (00-59) | 59 |
%p | AM/PM | PM |
%r | 12小時制時間 (hh:mm:ss AM/PM) | 02:30:59 PM |
%T | 24小時制時間 (hh:mm:ss) | 14:30:59 |
%X | 當地時間格式 (%H:%M:%S) | 14:30:59 |
%x | 當地日期格式 (mm/dd/yy) | 07/15/08 |
%D | 日期 (mm/dd/yy) | 07/15/08 |
%Y | 年 (四位數) | 2008 |
%y | 年 (兩位數) | 08 |
%m | 月 (01-12) | 07 |
%b / %h | 月縮寫 | Jul |
%B | 月全名 | July |
%d | 日 (01-31) | 15 |
%e | 日 (1-31, 空格補齊) | 15 |
%a | 星期縮寫 | Tue |
%A | 星期全名 | Tuesday |
%j | 年間第幾天 (001-366) | 197 |
%U | 年間第幾週 (週日為首日) | 28 |
%V | ISO 週數 (週一為首日) | 28 |
%Z | 時區名稱 | CST |
%z | 時區數值 (+/-HHMM) | +0800 |
%c | 完整日期時間 | Tue Jul 15 14:30:59 2008 |
%n | 換行 | - |
%t | Tab | - |
%% | 字面 % | % |
date '+This date now is:%x, time is now:%X, thanks!'
# This date now is:07/15/2008, time is now:14:30:59, thanks!
# 分步設定
date -s 20080715 # 設定日期
date -s 17:25 # 設定時間
# 一次設定
date -s "20080715 17:25"
# 或 ISO 格式
date -s "2008-07-15 17:25:00"
-d 強大功能)date -d "2 days ago" +%Y-%m-%d # 兩天前
date -d "next Monday" +%F # 下週一
date -d "1 month" +%Y-%m # 一個月後
date -d "yesterday 10:00" +%T # 昨天 10:00
date -d "@1620000000" # Unix 時間戳轉換
#!/bin/bash
# backup.sh - 以日期命名備份檔
DATE=$(date +%Y%m%d_%H%M%S)
tar -czf "/backup/www_${DATE}.tar.gz" /var/www/html
# 保留 30 天
find /backup -name "www_*.tar.gz" -mtime +30 -delete
hwclock)hwclock --systohc # 系統時間寫入硬體時鐘 (關機前)
hwclock --hctosys # 硬體時鐘讀入系統時間 (開機時)
現代系統由 systemd-timesyncd / chronyd / ntpd 自動同步 NTP,無需手工干預。
date 的格式化代碼是「時間的語言」。熟記 %F (%Y-%m-%d)、%T (%H:%M:%S)、%s (Unix timestamp)、-d 相對運算四大核心用法,覆蓋 95% 腳本與運維場景。記住:**僅 Root 能改時間,NTP 自動同步才是生產環境正解**。