Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux Shell 時間運算與時間差計算實戰技巧

編輯:Linux 教學

核心思路:統一轉換為 Unix 時間戳(秒數)

所有時間運算(加減、差值)的本質是:日期時間 → 時間戳 → 秒數運算 → 轉回目標格式。

場景 1:時間加減運算

需求:在 1990-01-01 01:01:01 基礎上增加 1 小時 20 分鐘

步驟解析

# 1. 基礎時間轉時間戳
time1=$(date +%s -d '1990-01-01 01:01:01')
echo $time1  # 631126861

# 2. 增量轉換為秒
time2=$((1*60*60 + 20*60))  # 4800 秒

# 3. 相加並轉回可讀格式
time1=$((time1 + time2))
result=$(date +%Y-%m-%d\ %H:%M:%S -d "1970-01-01 UTC $time1 seconds")
echo $result  # 1990-01-01 02:21:01

場景 2:計算兩時間差(天/時/分/秒)

需求:2010-01-01 與 2009-01-01 11:11:11 的差值

# 獲取差值總秒數
diff=$(( $(date +%s -d '2010-01-01') - $(date +%s -d '2009-01-01 11:11:11') ))

# 拆解天/時/分/秒
days=$((diff / 86400))
hours=$(( (diff % 86400) / 3600 ))
minutes=$(( (diff % 3600) / 60 ))
seconds=$((diff % 60))

echo "${days}天 ${hours}時 ${minutes}分 ${seconds}秒"

關鍵語法速查

語法說明示例
$(cmd)命令替換(推薦,可嵌套)a=$(date)
`cmd`命令替換(舊式,難嵌套)a=`date`
$((exp))算術擴展(整數運算)a=$((1+2))
date +%s -d 'STR'字符串轉時間戳date +%s -d '2023-01-01'
date -d @TS時間戳轉日期date -d @1672531200
date -d '1970-01-01 UTC N seconds'標準轉換格式(跨平台兼容)見上文示例

進階技巧

  • 相對時間:date -d '2 days ago'、date -d 'next monday'
  • 格式化輸出:date '+%Y%m%d_%H%M%S' 適合日誌文件命名
  • 毫秒級:date +%s%3N(需 GNU date 支持)
  • 時區處理:導出 TZ=UTC 或使用 date -u 避免時區干擾

常見坑點提醒

  1. date -d 支持的字符串格式因版本而異,生產環境建議統一用 YYYY-MM-DD HH:MM:SS
  2. 跨夏令時切換點計算需謹慎,推薦統一用 UTC 時間戳運算
  3. 32 位系統時間戳 2038 年溢出問題,長期項目建議用 64 位環境
Copyright © Windows教程網 All Rights Reserved