萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux date 指令日期時間操作與格式化完整速查

date 是 Shell 腳本處理日期運算、格式化輸出、系統時間同步的核心工具,支援豐富的格式化字串與相對時間計算。

格式化字串完整對照表

格式含義範例
%Y四位數年份2024
%y兩位數年份24
%m月份 (01-12)03
%b / %h月份縮寫Mar
%B完整月份名稱March
%d日期 (01-31)15
%H24小時制 (00-23)14
%I12小時制 (01-12)02
%M分鐘 (00-59)30
%S秒 (00-60)45
%sUnix 紀元秒數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
%VISO 週數 (01-53, 週一為首)11
%Z時區名稱CST
%z時區數值 (+/-HHMM)+0800
%c完整日期時間Fri Mar 15 14:30:45 2024
%FISO 日期 (%Y-%m-%d)2024-03-15
%TISO 時間 (%H:%M:%S)14:30:45
%R時分 (%H:%M)14:30
%D美式日期 (%m/%d/%y)03/15/24
%n換行
%tTab
%%字面 %%

相對時間運算(GNU date 專屬)


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

設定系統時間(需 root)


date -s "2024-03-15 14:30:00"       # 完整設定
date -s "14:30:00"                  # 僅設定時間
date -s "2024-03-15"                # 僅設定日期 (時間歸零)
# 硬體時鐘同步
hwclock -w                          # 系統時間寫入 BIOS
hwclock -s                          # BIOS 時間讀入系統

Shell 腳本常用模式


# 日期變數
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

常見陷阱

  • BSD date (macOS) 不支援 -d,需用 -v-1d 或安裝 gdate (coreutils)
  • %N 奈秒需核心支援且 coreutils 較新版本
  • 夏令時間切換期間,date -d "tomorrow" 可能非 24 小時
  • 時區環境變數 TZ=UTC date 臨時切換時區顯示

熟記核心格式字串、善用相對時間運算、掌握 UTC/本地時區轉換,即能在 Shell 腳本中靈活處理各類日期時間需求。

copyright © 萬盛學電腦網 all rights reserved