date 是 Shell 腳本處理日期運算、格式化輸出、系統時間同步的核心工具,支援豐富的格式化字串與相對時間計算。
| 格式 | 含義 | 範例 |
|---|---|---|
%Y | 四位數年份 | 2024 |
%y | 兩位數年份 | 24 |
%m | 月份 (01-12) | 03 |
%b / %h | 月份縮寫 | Mar |
%B | 完整月份名稱 | March |
%d | 日期 (01-31) | 15 |
%H | 24小時制 (00-23) | 14 |
%I | 12小時制 (01-12) | 02 |
%M | 分鐘 (00-59) | 30 |
%S | 秒 (00-60) | 45 |
%s | Unix 紀元秒數 | 1710500000 |
%N | 奈秒 (需 coreutils ≥ 8.22) | 123456789 |
%A | 完整星期名稱 | Friday |
%a | 星期縮寫 | Fri |
%u | 星期幾 (1-7, 1=Mon) | 5 |
%w | 星期幾 (0-6, 0=Sun) | 5 |
%j | 年間第幾天 (001-366) | 075 |
%U | 年間週數 (00-53, 週日為首) | 10 |
%V | ISO 週數 (01-53, 週一為首) | 11 |
%Z | 時區名稱 | CST |
%z | 時區數值 (+/-HHMM) | +0800 |
%c | 完整日期時間 | Fri Mar 15 14:30:45 2024 |
%F | ISO 日期 (%Y-%m-%d) | 2024-03-15 |
%T | ISO 時間 (%H:%M:%S) | 14:30:45 |
%R | 時分 (%H:%M) | 14:30 |
%D | 美式日期 (%m/%d/%y) | 03/15/24 |
%n | 換行 | |
%t | Tab | |
%% | 字面 % | % |
date -d "yesterday" # 昨天
date -d "tomorrow" # 明天
date -d "last Monday" # 上週一
date -d "next Friday" # 下週五
date -d "2 weeks ago" # 兩週前
date -d "3 months" # 3 個月後
date -d "1 day 2 hours ago" # 1 天 2 小時前
date -d "@1710500000" # Unix 時間戳轉換
date -d "2024-03-15 14:30:00" # 指定時間字串解析
date +"%Y-%m-%d %H:%M:%S" # 2024-03-15 14:30:45
date +"%Y%m%d_%H%M%S" # 20240315_143045 (檔名適用)
date -d "-1 day" +"%Y%m%d" # 昨天日期 (20240314)
date -d "last month" +"%Y-%m" # 上個月 (2024-02)
date -u +"%Y-%m-%dT%H:%M:%SZ" # UTC ISO 8601
date -s "2024-03-15 14:30:00" # 完整設定
date -s "14:30:00" # 僅設定時間
date -s "2024-03-15" # 僅設定日期 (時間歸零)
# 硬體時鐘同步
hwclock -w # 系統時間寫入 BIOS
hwclock -s # BIOS 時間讀入系統
# 日期變數
TODAY=$(date +%F)
YESTERDAY=$(date -d "-1 day" +%F)
TIMESTAMP=$(date +%s)
ISO8601=$(date -u +%Y-%m-%dT%H:%M:%SZ)
# 日期比較 (需轉換為秒數)
if [ $(date -d "$DATE1" +%s) -gt $(date -d "$DATE2" +%s) ]; then
echo "$DATE1 較晚"
fi
# 日期迴圈
for i in {0..6}; do
echo $(date -d "-$i day" +%F)
done
# 日誌檔名含日期
tar czf "backup_$(date +%Y%m%d).tar.gz" /data
timedatectl list-timezones | grep Taipei
timedatectl set-timezone Asia/Taipei
# 或手動
ln -sf /usr/share/zoneinfo/Asia/Taipei /etc/localtime
echo "Asia/Taipei" > /etc/timezone
-d,需用 -v-1d 或安裝 gdate (coreutils)%N 奈秒需核心支援且 coreutils 較新版本date -d "tomorrow" 可能非 24 小時TZ=UTC date 臨時切換時區顯示熟記核心格式字串、善用相對時間運算、掌握 UTC/本地時區轉換,即能在 Shell 腳本中靈活處理各類日期時間需求。