Unix time 與 2038 年問題
(本篇為 BlogBlog 同樂會 - 第 7 期:有趣的小知識或冷門概念之投稿貼文)
Unix time 是什麼?
Unix time 是從西元 1970 年 1 月 1 日 0 時 0 分 0 秒(UTC)至今所經過的秒數(不包含閏秒1),運用於資料庫、logs、檔案的 timestamp 等處。
這是現在的 Unix time3,在 Javascript 中可以用 Date.now() 除以 1000 並向下取整得出。
2038 年問題
- 現在有許多裝置仍以 32 位元有號整數4表示 Unix time。
- 西元 1970 年 1 月 1 日 0 時 0 分 0 秒的 2147483648(231)秒後,這些 Unix time 會 overflow,導致對應 UTC 時間變成西元 1901 年 12 月 13 日 20 時 45 分 52 秒。
- 任何仍以 32 位元有號整數儲存 Unix time 的任何程式與系統可能出現問題。
- 意即類似 Y2K 的危機將於 西元 2038 年 1 月 19 日 3 時 14 分 8 秒再度重演。關於其更詳細的介紹,可以看啾啾鞋的這部影片:
解決方法
- 將所有舊的硬體汰換成 64 位元。
- 不使用以 32 位元有號整數處理 timestamp 的軟體。
想不到了……。饒過我吧,我不是這方面的專家啊。(不過英文維基百科倒是有列出大家對該問題的應對措施)
免責聲明(?)
如果上文內容有誤或是用字不夠精確,請使用 e-mail 聯繫我,或是進入我的 Discord 伺服器幫助我。