エポックタイムスタンプの秒 vs ミリ秒

秒ベースとミリ秒ベースのエポックタイムスタンプの違いを理解し、どちらのフォーマットかを検出する方法と一般的な変換ミスの回避方法を学びます。

Fundamentals

詳細な説明

秒 vs ミリ秒 エポックタイムスタンプ

最も一般的なタイムスタンプ関連のバグの1つは、Unixエポックからのミリ秒を混同することです。両方のフォーマットが広く使用されており、混同するとはるか過去やはるか未来の日付になります。

2つのフォーマット

フォーマット 桁数 日付
10 1705312200 2024-01-15 09:30:00 UTC
ミリ秒 13 1705312200000 2024-01-15 09:30:00 UTC

どのシステムがどちらを使うか?

秒ベース(10桁):

  • Unix/Linux time()システムコール
  • Python time.time()
  • PHP time()
  • MySQL UNIX_TIMESTAMP()
  • ほとんどのREST API

ミリ秒ベース(13桁):

  • JavaScript Date.now()
  • Java System.currentTimeMillis()
  • Elasticsearchタイムスタンプ
  • MongoDB ObjectIdタイムスタンプ

フォーマットの検出方法

簡単な方法:桁数を数えます。

10桁 → 秒(2001年から2286年の間の日付を表す)
13桁 → ミリ秒(2001年から2286年の間の日付を表す)

秒のタイムスタンプをミリ秒として誤って解釈すると、1970年1月(エポックの数日後)の日付になります。ミリ秒を秒として解釈すると、数千年先の日付になります。

安全な変換

function toMilliseconds(timestamp) {
  return timestamp < 10000000000 ? timestamp * 1000 : timestamp;
}

ユースケース

エポックタイムスタンプを使用するAPI、データベース、またはログファイルを扱う際にこのガイドを参照してください。秒とミリ秒を混同するという非常に一般的なバグを防ぐのに役立ちます。

試してみる — Epoch Countdown

フルツールを開く