Unix タイムスタンプ FAQ

Unix タイムスタンプに関する最もよくある質問への手早い回答 — 単位、タイムゾーン処理、2038 年問題、言語ごとの変換など。

よくある質問

Unix タイムスタンプとは?
Unix タイムスタンプは、Unix エポック(1970 年 1 月 1 日 00:00:00 UTC)から経過した秒数です。言語に依存せずタイムゾーンにも依存しない整数で、時間上の任意の瞬間を一意に識別します。
Unix エポックとは?
Unix エポックは 1970 年 1 月 1 日 00:00:00 UTC です。すべての Unix タイムスタンプは、この固定の基準点から前方へ(負の値では後方へ)測られます。1970 年が選ばれたのは実用的な理由でした:ベル研究所で Unix が設計されていた当時の、最近のきりのよい年だったのです。
10 桁と 13 桁のタイムスタンプの違いは?
10 桁のタイムスタンプ(例:1700000000)はエポックからの秒を表します。13 桁(例:1700000000000)はミリ秒を表します。JavaScript の Date.now() はミリ秒を返し、ほとんどの Unix システムコールや Python・Go・PHP のような言語は既定で秒を返します。
なぜ JavaScript は秒ではなくミリ秒を使うのか?
JavaScript の Date API は、1995 年当時に利用できたシステムタイマーの解像度に合わせて設計されました。ミリ秒を使うと、1 秒未満の継続時間で精度を失いません。サーバーが生成した秒単位の Unix タイムスタンプを扱うときは、new Date() に渡す前に 1000 を掛けてください。
JavaScript で Unix タイムスタンプを読みやすい日付に変換するには?
秒のタイムスタンプには:new Date(1700000000 * 1000).toISOString()。ミリ秒のタイムスタンプには:new Date(1700000000000).toISOString()。どちらも '2023-11-15T06:13:20.000Z' のような ISO 8601 文字列を生成します。ローカライズした表示には timeZone オプション付きの toLocaleString() を使ってください。
Unix タイムスタンプはタイムゾーンを考慮する?
いいえ。Unix タイムスタンプは常に UTC の 1 つの瞬間を表します。タイムゾーン情報は、タイムスタンプを表示用に整形するときにのみ適用されます。異なるタイムゾーンの 2 台のデバイスは、同じ瞬間に対して同じ Unix タイムスタンプを生成します。
2038 年問題とは?
Unix タイムスタンプを 32 ビット符号付き整数として保存するシステムは、2,147,483,647 までの値しか表せません。これは 2038 年 1 月 19 日 03:14:07 UTC に当たります。その瞬間を過ぎると整数が大きな負の数にオーバーフローします。現代の 64 ビットシステムは影響を受けませんが、組み込みシステムや旧式のデータベースは依然としてリスクがありえます。
負の Unix タイムスタンプとは?
負の Unix タイムスタンプは Unix エポックより前の瞬間を表します。たとえば -86400 は 1969 年 12 月 31 日 00:00:00 UTC です。ほとんどの現代の日付 API は負のタイムスタンプを正しく扱いますが、一部の古いシステムやデータベースは対応していません。
Python で Unix タイムスタンプを取得するには?
秒には import time; int(time.time()) を使います。明示的な UTC datetime には:import datetime; int(datetime.datetime.now(datetime.timezone.utc).timestamp())。ミリ秒には:int(time.time() * 1000)。
Unix タイムスタンプの精度は?
標準の Unix タイムスタンプは秒精度です。1 秒未満の精度には、ミリ秒タイムスタンプ(13 桁)が Web API や JavaScript で一般的です。一部のシステムはマイクロ秒(16 桁)やナノ秒を使います。適切な単位は、アプリケーションが実際に必要とする精度によります。