hitode909の日記

以前はプログラミング日記でしたが、今は子育て日記です

西暦5万年問題

UNIX 元期からの経過ミリ秒を秒として扱ってしまうと、時刻が1000倍になって、最近の日時だと、西暦5万年くらいになってしまうことがある。
今日、Sentryを見てたら、Invalid date format: 53793-11-30みたいなエラーが流れてきて、これはミスって1000倍しているに違いない!とテンションが上がっていた。

f:id:hitode909:20211028122017p:plain:w500
野生の西暦5万年を発見して興奮している

秒とミリ秒が別の型になってればこういう間違いを減らせそうだけど、システム内に閉じた部分では好んでepochを使いたい人はいないだろうし、epochをやりとりするところは、だいたい、システム同士の連携部分だったり、外部サービスからリクエストを受け取るときだったりで、そういうインターフェイスの入出力時に、桁が1000倍なってるかどうか、というのを機械的に判定するのは難しそう。
Dateが1970年を指し示していたら嫌な予感がするけど、本当に1970年の出来事を扱っているならそれで問題ない、ということになる。
逆に、本当に西暦5万年になったら西暦5万年のDateTimeを扱うようになっているはずで、ためしに西暦5万年のときに1000倍すると?というのを試してみたらInvalid Dateになっていた。その頃には僕はこの世にいないので安心。

new Date(new Date().getTime()*1000)
Mon Jul 01 53793 01:09:40 GMT+0900 (日本標準時)
new Date(new Date().getTime()*1000*1000)
Invalid Date