SIMETRIUM .COM
上限 2 147 483 647 · 2038-01-19
36 種語言
Symbol plate INT32
unix 2147483647 MAX
unix 用小寫,epoch time 同義勿與 TAI、MJD 混淆
單位頁 秒的計數 · ISO 8601 寫法 第 1/1 頁 · 修訂 2026-09

Unix 時間與 ISO 8601 寫法

國際單位制之外的單位 · 量:以 1970 年起的整數秒表示的時刻

2038 年 1 月 19 日世界時三時十四分七秒,一個三十二位元寬的秒計數器將走到 2 147 483 647 — 它所能容納的最大數。下一次滴答會抬起最高位元,同一個二進位字組從此便被讀作負數:凡以此計數保存時間的鐘錶,將不在 2038 年,而在 1901 年的十二月。這並非遙遠未來的奇談 — 一台工業控制器或一只水錶,服役的年頭長過所剩的十二年。

這套計數造得極簡:秒自 1970 年 1 月 1 日子夜起接連而行,其中一日恆為 86 400 秒。正是這份簡單,成了它兩處特性的根源。一方面,由數字立刻可得曆法日期,反之亦然,於是每一份事件紀錄檔、每一個資料庫、每一套檔案系統都以它記時。另一方面,閏秒在這樣的計數中根本無從表達,也就是說,它名不副實,所編號的並非秒而是帶小數的日,實為 UTC 寫法的線性函數,而非流逝時間的計數器。

記號 unix time · epoch time
計數的單位 國際單位制的秒
計數的起點 1970-01-01T00:00:00Z
計數一日中的秒數 恰好 86 400 s,不含閏秒
三十二位元的上限 2038-01-19T03:14:07Z
已完成譯本 / 36
01 · 定義

Unix 時間是自 1970 年 1 月 1 日子夜協調世界時以來所經過的秒數,前提是每一日恰含 86 400 秒。ISO 8601 的寫法以另一種方式陳述同一件事:以曆法日期、當日時刻與相對本初子午線的偏移來表示,各欄位嚴格自粗至細排列。

關於 86 400 秒的那一條保留,並非細枝末節,而是定義中最要緊之處。地球自轉事務機構所宣告的閏秒,這套計數無從容納,因此在插入的那一刻,系統要麼把同一個數值重複兩遍,要麼把鐘撥回。由此可得一件要緊的事:若兩個事件之間落有一次插入,那麼兩個 unix 數之差便不是其間真正流逝的秒數 — 與原子時標的偏離已累積到二十七秒。

上限則不取決於定義,而取決於儲存的位元寬度。三十二位元帶符號給出的最大值為 2 147 483 647,落在 2038 年 1 月 19 日;下一次增量把最高位元置為一,使數變負,將鐘拋回 1901 年 12 月 13 日。六十四位元把這道界線向前推了兩千九百二十億年,然而同樣是這六十四位元,其中的整數奈秒早在 2262 年便已耗盡。

依標準的寫法要解決的是另一樁事 — 交換而非儲存 — 故而其中要緊的,是數字全然沒有的那些東西:時區偏移、日期與時刻之間的分隔符,以及字串等長時字典序與時間序相合這一條規則。正是這最後一項性質,使這一格式成了檔名與紀錄檔中排序的根基。

形式上 t — Unix 時間,N — 有號整數的位元寬度,JD — 儒略日
自紀元計數
t = 86 400 · (JD − 2 440 587.5)
字組長度的上限
t(max) = 2^(N−1) − 1
溢位
t' = ((t + 2^31) mod 2^32) − 2^31
日數與餘數
D = ⌊t / 86 400⌋, r = t mod 86 400
T
因次:秒的計數量度時間
86 400
計數一日中的秒數 — 始終如此,無一例外
2³¹
越過此界,有號整數便斷裂
互動 · 三十二位元直至失效

請以滑桿牽引時間,看暫存器如何填滿:各位元自右向左點亮,只要最高的那一位元、符號位元仍舊暗著,數便是正的,日期便在增長。計數器一旦越過 2 147 483 647,最高位元就紅光驟起,整個數變負,鐘跳回 1901 年。

第 31 位元 — 符號位元第 0 位元
時刻,年
秒的計數
32 位元中容納什麼
系統將如何讀取

平直的線與踉蹌的線

綠色的直線是原子時標,那裡每一秒確實是一秒。紅色的階梯線是 Unix 時間,每逢插入便把同一個時間戳記給出兩回,因而線在原地停住。偏離已達二十七秒且仍在增長,故而這套計數用於曆法日期尚可,用於物理學中量度時段則不可。

02 · 換算

請輸入時間戳記或日期

計數的各倍數之間 — 秒、毫秒、微秒與奈秒 — 換算是精確的,因為彼此只差一個因子。近似的只有一行:換算到原子時標,須知道截至所給時刻已累積了多少閏秒。

依標準解析字串,本頁在帶 Z 的擴充寫法中進行;不帶分隔符的基本形式已移入精細設定。

2038 年的問題不在標準,而在硬體與舊程式碼之中:三十二位元的時間戳記坐在各類儀錶的韌體裡、工業控制器裡、檔案系統的格式裡,以及那些欄位早已宣告為四位元組的資料庫裡。在原始碼中改動型別不難;難的是在所剩的十二年裡逐一走過數以百萬計已裝設的器件 — 這與 2000 年之前所面對的,是同一類的活計。

換算表
數值說明
依標準的寫法
在 32 位元中
紀元

03 · 數量級
對數標度:自一秒至六十四位元的上限

以秒計的間隔
淺色的那條帶,是有號三十二位元數所能容納的範圍:自一秒直到上限 2 147 483 647,右端以紅線標出。越出其外的一切都要六十四位元,而那裡的餘量大得近乎揶揄 — 兩千九百二十億年,即宇宙年齡的二十倍。
04 · 測量儀器

以何物為事件蓋上時間戳記

板上時鐘 · NTP · 紀錄檔 · 試驗台
即時時鐘

另有一枚帶電池的晶片,在器件斷電時仍維持計數。它通常保存的並非 unix 時間戳記,而是分開存放的曆法各欄位,其年份欄位的位元寬度自有其數,因此在老舊電路板上,關於 2038 的談話往往從這一問起頭:晶片本身能數到哪一年。

經由網路的同步

NTP 協定把機器的鐘對到共同時間,精度可達數毫秒,它同時也以專門的旗標在一日之前預告插入。它自己也有一道界線,且來得更早:計數自 1900 年起,用的是無號三十二位元,將在 2036 年二月溢位。

事件紀錄檔

寫入紀錄檔的時間戳記,或用數字,或用依標準的字串,而後者更可取,理由恰只有一條:等長的字串,字典序與時間序相合,於是各條紀錄無須解析日期便能排好。正因如此,這一格式遠遠越出了計算技術的範圍而流布開來。

把時鐘撥快的試驗台

要試一台器件對 2038 年是否有備,只有一個法子 — 把它的鐘撥過那道不祥的界線,看紀錄檔、憑證與區間計算會成什麼樣子。人們已藉此在計費、門禁系統與金鑰有效期中找出了故障:那裡未來的日期是由加法得出的,遠在界線本身之前就已溢位。

05 · 書寫規則

自粗至細,且始終帶時區偏移

標準要求各欄位依遞減次序排列、年份四位、以連字符作日期分隔、時刻之前冠以字母 T;時區偏移或以字母 Z 表示本初子午線,或寫作正負時與分。unix 時間戳記寫作整數,不分節,且必須註明倍數,因為一千的因子把秒與毫秒分開,而單看數的大小,兩者極易相混。

正確
2026-09-02T14:30:00Z
2026-09-02T17:30:00+03:00
2026-W36-3 · 2026-245
1788359400 s · 1788359400000 ms
錯誤
02.09.2026 14:30
2026-09-02 14:30:00
2026-9-2T14:30:00Z
unix 1788359400 = 1788359400 s TAI

第一種寫法在不同國家讀法不一,故而在資料交換中不可取。第二種把分隔符與偏移一併略去,於是時刻在兩個方向上各有一日的不確定。第三種丟掉了前導零,字串便不再按字典序排列 — 而這一格式所受的看重,恰恰正在此性質。第四種在 unix 計數與原子時標之間畫上等號,可兩者之間橫著二十七秒累積的插入。

06 · 相鄰單位

與之並列的,是所有依同一原理造成、只是起點不同的計數:NTP 時間自 1900 年起,儒略日自公元前 4713 年正午起,衛星系統的時標自 1980 年一月起。它們只在紀元與單位上有別,故而減去一個常數即可換算。

unix
自 1970 年
有號的秒
NTP
自 1900 年
其上限已落在 2036 年
TAI-64
原子秒
閏秒如實計入
儒略日
JD = t / 86 400 + 2 440 587.5
NTP 時間
t(NTP) = t + 2 208 988 800
原子時標
TAI = t + 10 + 自 1972 年以來的閏秒數

Simetrium 的檔案中 與之相鄰的是 儒略日,換算常數即取自於此, UTC、TAI 與 UT1 各時標,用以解釋消失的閏秒, 作為計數的單位,以及 位元,其位元寬度正決定了上限。

07 · 歷史部分

因位元不足而擇定的紀元

檔案 · 1971 → 2038
1971 · 莫瑞丘
只夠用兩年上下的滴答計數

在第一部 Unix 手冊中,時間自 1971 年初起,以秒的六十分之一計數,三十二位元中這樣的計數僅能容下兩年上下。它耗盡得如此之快,以致每出一版系統就得挪一次紀元,於是捨去秒的分數,改用整秒。

每秒 60 次滴答
1973 · 零點的抉擇
取整年而非整日

改用整秒之後,開發者贏得了一百三十六年的餘量,遂能依便利而非依無奈來擇定起點。取的是 1970 年 1 月 1 日 — 過去最近的一個整年之始,機器紀錄本來也到不了那裡 — 自此再未改動過一次,儘管系統曾不止一次從根本上重寫。

epoch = 1970-01-01
1988 · 日內瓦
日期寫法的標準

國際標準化組織把各自分道的國別格式歸併為一,並以一條簡單的規則為其根基:各欄位自粗至細,皆帶前導零。這一副產品竟比初衷更為要緊 — 這樣的字串可如數字般排序,於是格式流入了檔名、紀錄檔與各種交換協定。

ISO 8601,今為 -1 與 -2
2038 · 1 月 19 日
03:14:07 及其後的一秒

桌面與伺服器系統早已轉到六十四位元,那裡的界線被推到了任何合乎情理的視野之外。危險留在了別處:留在服役二十年的儀器韌體裡,留在欄位宣告為四位元組的檔案格式裡,也留在對將來期限的計算裡 — 只消在今日的日期上加十五年,今天就已溢位。

→ 1901-12-13T20:45:52Z
四位元組的欄位:位元寬度在格式中宣告一次,卻比任何程式碼活得更久
計量學札記

一種名不副實、並不計秒的計數

Unix 時間的定義聽來像是在計秒,然而每日整整 86 400 秒這一要求,使它成了別的東西:UTC 寫法的線性函數,而非流逝時間的量度。每當地球自轉事務機構宣告一次插入,這套計數便須把同一個數值重複兩遍,或者向後一跳,而兩個時間戳記之差恰恰失掉了那一秒。半個世紀裡,這樣的損失累計已有二十七次,故而凡需真正時段的活計,取的是原子時標,而非此者。

第二處特性全然不在定義之中,而在儲存的方式之中,這也使它成為我們這份目錄裡唯一一道既非自然、亦非約定所設,而是由機器字組長度所設的上限。儒略日永無盡期,因為它是個數;Unix 時間在 2038 年 1 月 19 日走到盡頭,因為它是個四位元組的欄位。量與其表示之間的分別,向來不大牽動計量學家的心思,而在此處,恰恰正是它決定了一切。

最高位元一亮 — 整個日期便化作負數
目錄 · 計量單位

每個量都有一份檔案

七個 SI 基本單位,二十二個有专名的導出單位,以及若干制外量 — 少了它們,工程与曆法都轉不動。

7
基本
22
導出
36
種語言

時間、時標與機器的計數

已開啟的資料頁被標出

SI 基本單位

標出的是秒 — 此計數的單位

紀元與上限

自何處計起,至何處為止
08 · 你的語言
每個連結都指向真實的語言頁面

用你的語言閱讀

已翻譯並校對 初稿翻譯 待譯