線上 UTC 時間戳記 timestamp

寫程式的人應該都遇過這種事:API 回傳一串 1784889000,想知道它是幾月幾號,還得開終端機打 date 指令;或是要塞一個 ISO 8601 時間進測試資料,結果又忘了結尾的 Z 要不要加、毫秒要寫幾位。

這種小事一天會碰到好幾次,每次都要重新 Google 一遍,實在很煩。所以我把自己最常查的東西整理成一頁:最上面是即時跑的 UTC 時間,常用格式點一下就能複製;往下是時間換算、各語言取得現在時間的寫法、格式符號對照,最後是幾個我自己實際踩過的雷。

整個工具都在你的瀏覽器裡執行,不會把任何資料送出去,可以放心貼公司的時間戳記進來換算。

 UTC Timestamp更新中 · —
--:--:--.000UTC
--------- ---
常用格式點右邊綠色按鈕,或直接點數值
時間換算貼 Unix 秒數或 ISO 字串都可以
10 位數會當成秒,13 位數當成毫秒,16 和 19 位數則是微秒和奈秒。
各語言怎麼取現在時間點一下程式碼就複製
語言ISO 8601 字串Unix 時間
JavaScriptnew Date().toISOString()Date.now()
Pythondatetime.now(timezone.utc).isoformat()int(time.time())
Gotime.Now().UTC().Format(time.RFC3339)time.Now().Unix()
JavaInstant.now().toString()Instant.now().getEpochSecond()
C#DateTimeOffset.UtcNow.ToString("o")DateTimeOffset.UtcNow.ToUnixTimeSeconds()
PHPgmdate('c')time()
Rust (chrono)Utc::now().to_rfc3339()Utc::now().timestamp()
RubyTime.now.utc.iso8601Time.now.to_i
Shelldate -u +%Y-%m-%dT%H:%M:%SZdate +%s
PostgreSQLSELECT now() AT TIME ZONE 'UTC';SELECT extract(epoch FROM now());
MySQLSELECT UTC_TIMESTAMP();SELECT UNIX_TIMESTAMP();
把 Unix 秒數轉回時間手邊有個數字,想知道那是什麼時候
環境指令
Linuxdate -u -d @1784889000
macOSdate -u -r 1784889000
Pythondatetime.fromtimestamp(1784889000, timezone.utc)
JavaScriptnew Date(1784889000 * 1000).toISOString()
PostgreSQLSELECT to_timestamp(1784889000);
格式符號對照表strftime 與 Go layout
用途strftimeGo layout範例
四位年%Y20062026
月(補零)%m0107
日(補零)%d0224
24 小時制%H1508
分%M0430
秒%S0500
小數秒%f(微秒).000.482
一年第幾天%j—205
時區位移%z-0700+0800
時區縮寫%ZMSTCST
Unix 秒%s(GNU).Unix()1784889000
星期簡寫%aMonFri
Go 是拿這個固定時間當範本:2006-01-02 15:04:05 -0700 MST,數字剛好照 1 到 7 排下來,記起來不難。
秒數換算設快取、TTL、過期時間的時候會用到
長度秒毫秒
1 分鐘6060,000
1 小時3,6003,600,000
1 天86,40086,400,000
1 週604,800604,800,000
30 天2,592,0002,592,000,000
365 天31,536,00031,536,000,000
第 10 億秒2001-09-09T01:46:40Z
2,147,483,6472038-01-19T03:14:07Z,32 位元存得下的最後一秒
容易踩到的雷
  • 秒和毫秒搞混。10 位數是秒,13 位數是毫秒,差了 1000 倍。弄錯的話日期不是跑到 1970 年,就是飛到五萬年後。
  • 資料庫直接存本地時間。一律存 UTC,要顯示的時候才換算時區。PostgreSQL 請用 timestamptz,不要用 timestamp。
  • 把 +08:00 當成時區。那只是時差,不是時區。只有 Asia/Taipei 這種名稱才知道日光節約和歷年規則怎麼變。排程和提醒一定要存這種名稱。
  • 用系統時鐘算執行時間。NTP 校時的時候,時間可能會往回跳。要量長度請改用單調時鐘:performance.now()、time.monotonic()、time.Since()。
  • 以為 ISO 8601 就是 RFC 3339。ISO 8601 能接受的寫法很多(像 20260724T083000Z),RFC 3339 只是其中比較嚴格的一小塊。API 統一用 RFC 3339 最保險。
  • JS 的 getMonth() 從 0 開始,getDate() 卻從 1 開始。還有 new Date("2026-07-24") 會當成 UTC,換成 new Date("2026/07/24") 就變本地時間。
  • 認定一天就是 86400 秒。有日光節約的地方,一天可能只有 23 小時,也可能有 25 小時。要跨日請用日期函式算,不要自己加減秒數。
  • 拿 Unix 時間做精密計時。它裡面根本沒有閏秒的位置,閏秒會被系統抹掉或跳過,精度要求高的場合別用。
時間是抓你電腦上的時鐘,和標準時間可能差個幾百毫秒。

最後那幾個雷,每一個都是我或同事真的在正式環境踩過的。尤其是秒和毫秒搞混,還有資料庫存本地時間,出事的時候通常要花好一段時間才找得到原因。

如果你有常用、但這裡沒列到的格式或寫法,歡迎留言告訴我,我再補進來。

張貼留言

0 留言