Linux 系統管理、日誌分析、腳本開發中,Unix 時間戳(自 1970-01-01 00:00:00 UTC 秒數)與人類可讀日期互轉是高頻需求。本文匯總 date、perl、php、python、bash 內建等多種工具的轉換語法,並區分 GNU date(Linux)與 BSD date(macOS/FreeBSD)差異。
| 需求 | 指令 | 範例輸出 |
|---|---|---|
| 當前時間戳 | date +%s | 1709647200 |
| 指定日期轉時間戳 | date -d "2024-03-05 14:30:00" +%s | 1709647200 |
| 支援自然語言 | date -d "yesterday" +%sdate -d "last friday" +%sdate -d "2 weeks ago" +%s | 相對時間戳 |
| 時間戳轉日期(預設格式) | date -d @1709647200 | Tue Mar 5 14:30:00 CST 2024 |
| 時間戳轉自訂格式 | date -d @1709647200 +"%Y-%m-%d %H:%M:%S" | 2024-03-05 14:30:00 |
| 時間戳轉 UTC | date -u -d @1709647200 +"%Y-%m-%d %H:%M:%S" | 2024-03-05 06:30:00 |
| 格式化當前時間 | date +"%F %T" | 2024-03-05 14:30:00 |
| 常用格式字元 | %F=%Y-%m-%d %T=%H:%M:%S %s=時間戳 %N=奈秒 %z=時區偏移 | — |
# 檔案每行一個時間戳,轉換為日期
cat timestamps.txt | while read ts; do date -d @$ts +"%F %T"; done
# 管線處理日誌時間欄位
awk '{print $1}' access.log | while read ts; do date -d @$ts +"[%F %T]"; done
| 需求 | GNU date (Linux) | BSD date (macOS/FreeBSD) |
|---|---|---|
| 日期轉時間戳 | date -d "2024-03-05 14:30:00" +%s | date -j -f "%Y-%m-%d %H:%M:%S" "2024-03-05 14:30:00" +%s |
| 時間戳轉日期 | date -d @1709647200 | date -r 1709647200 |
| 時間戳轉自訂格式 | date -d @1709647200 +"%F %T" | date -r 1709647200 +"%F %T" |
| 自然語言相對時間 | date -d "yesterday" | date -v-1d(需 -v 參數) |
macOS 建議安裝 GNU date:brew install coreutils → 使用 gdate 指令,語法與 Linux 完全一致。
# 時間戳 → 日期
python3 -c "import datetime; print(datetime.datetime.fromtimestamp(1709647200).strftime('%Y-%m-%d %H:%M:%S'))"
# 日期 → 時間戳
python3 -c "import datetime; print(int(datetime.datetime(2024,3,5,14,30).timestamp()))"
# UTC 版本
python3 -c "import datetime; print(datetime.datetime.utcfromtimestamp(1709647200).strftime('%Y-%m-%d %H:%M:%S'))"
# 時間戳 → 日期
perl -e "use POSIX; print strftime('%Y-%m-%d %H:%M:%S', localtime(1709647200)), \"\n\";"
# 日期 → 時間戳
perl -e "use Time::Local; print timelocal(0,30,14,5,2,124), \"\n\";" # 月份 0-11
# 時間戳 → 日期
php -r "echo date('Y-m-d H:i:s', 1709647200) . PHP_EOL;"
# 日期 → 時間戳
php -r "echo strtotime('2024-03-05 14:30:00') . PHP_EOL;"
# mktime 手動構造
php -r "echo mktime(14,30,0,3,5,2024) . PHP_EOL;"
# 時間戳 → 日期(printf 格式化)
printf '%(%Y-%m-%d %H:%M:%S)T\n' 1709647200
# 當前時間戳
printf '%(%s)T\n' -1
date 預設使用系統時區(/etc/localtime 或 $TZ)。date -u ... 或 TZ=UTC date ...。TZ=Asia/Taipei date -d @1709647200。
# GNU date 奈秒
date +%s%N # 秒+奈秒(19 位數)
date +%s.%N # 秒.奈秒(浮點數字串)
# Python 3.7+ time.time_ns()
python3 -c "import time; print(time.time_ns())"
# Bash 5.0+ $EPOCHREALTIME
echo $EPOCHREALTIME
#!/bin/bash
# 將日誌中 Unix 時間戳欄位轉為可讀格式
# 輸入:2024-03-05 14:30:00 [1709647200] message
# 輸出:2024-03-05 14:30:00 [2024-03-05 14:30:00] message
while IFS= read -r line; do
if [[ $line =~ \[([0-9]{10})\] ]]; then
ts=${BASH_REMATCH[1]}
readable=$(date -d @$ts +"%F %T")
line=${line/\[$ts\]/[$readable]}
fi
echo "$line"
done < app.log > app_readable.log
date -d @TS +FMT、date -d "STR" +%s 覆蓋 99% 場景。-j -f / -r 語法,或安裝 gdate 統一體驗。while read + date 或 python3 -c 避免反覆啟動進程。使用 Magent 搭建 Memcached 叢集:安裝編譯與腳本自動化部署
網站運維 SSH 常用命令速查手冊:壓縮、文件操作、遠程下載、數據庫備份
Linux 常用搜尋指令大全:find、locate、whereis、which、type
Linux 定時任務 Cron 完整實戰指南:系統級 /etc/cron.*、使用者級 crontab、排程語法與除錯技巧
Linux 協議棧 ARP 數據包接收處理流程:arp_rcv 到 arp_process
校園網互聯網過濾零成本方案:Linux + Squid + SquidGuard 實戰部署