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