Unix時刻:日付を信じる前に単位を確かめる

ログやAPIの数値が不自然な日付になることがあります。謎のタイムゾーンではなく、秒をミリ秒として読んだり、その逆だったりするのがよくある原因です。

数値には単位の明示が必要

基点は1970-01-01T00:00:00Zです。秒を使うシステムもありますが、JavaScriptのDateはミリ秒を使い、うるう秒を無視します。

秒を1000倍するとミリ秒です。特に基点の近くや負数では桁数だけを頼らず、データの仕様を確認します。

参考資料: MDN — Date timestamps, UTC and milliseconds

ゾーンが変えるのは表示で、瞬間ではない

同じ瞬間を複数の現地時刻で示しても、元のタイムスタンプは同じです。手で時差を足してからそのゾーンで表示すると、二重に適用するおそれがあります。

この変換器はUTCを明示的に使い、日付入力にZを求めます。言語や国からゾーンは推測しません。現地表示にはタイムゾーン変換を使います。

精度と範囲も意味の一部

秒の小数部分はミリ秒を表せます。1.25秒は1250秒ではありません。1秒未満で記録を並べたい場合は小数を残します。

秒は小数3桁まで、ミリ秒は整数を受け付けます。存在しない日を黙って修正せず検証します。うるう秒の間隔測定や専門的な時刻仕様の代用品ではありません。

例:同じ瞬間を表す2つの数値

86400秒と86400000ミリ秒は、どちらも1970-01-02T00:00:00.000Zです。86400をミリ秒と読むと1970-01-01T00:01:26.400Zになり、言語や暦の問題ではありません。

−0.25秒は1969-12-31T23:59:59.750Zです。負号は基点より前を表し、小数部分も残ります。負の値だから無効な日付とは限りません。

参考資料