Pythonのエポックミリ秒入門|取得・変換コードと注意点
エポックミリ秒は、UNIX時間(1970年1月1日 00:00:00 UTCからの経過時間)をミリ秒単位で表したもの。
ログやAPIのタイムスタンプ、IoTデータなどで広く利用されており、エンジニアなら一度は触れる形式でしょう。
ここではPythonでの取得・変換方法を、すぐ使えるサンプルとあわせて紹介します。
「エポックミリ秒」から「日時」への変換ツールも作ってみましたので、興味のある方は使ってみてください。

エポックミリ秒とは?
エポックミリ秒は、UNIX時間をミリ秒単位で表現した形式です。
秒単位のUNIX時間より1000倍の精度を持ち、リアルタイム性の高い処理に適しています。
例えば以下のような用途で見かけることが多いでしょう。
- ログ解析での詳細な発生時刻の記録
- API通信時の精密な時刻同期
- IoTデバイスによる時刻付きデータ送信
ミリ秒単位で管理することで、時刻の衝突や曖昧さを減らすことができます。
現在時刻をミリ秒で取得する
Pythonでは、time.time()
を使ってUNIX時間を取得し、1000倍すればミリ秒になります。
import time
ms = int(time.time() * 1000)
print(ms) # 例: 1723812345678
この方法はシンプルで高速ですが、値はシステムクロック依存。
より精度が必要な場面では、time.time_ns()
からナノ秒を取得し、整数除算でミリ秒に変換すると良いでしょう。
ミリ秒から日付へ変換する
取得したミリ秒を人間が読める形に直すには、秒単位に変換してdatetime
モジュールを利用します。
import datetime
ms = 1692105600000
dt = datetime.datetime.fromtimestamp(ms / 1000)
print(dt) # 2023-08-15 09:00:00
fromtimestamp()
はローカル時刻を返します。
UTCが必要な場合はutcfromtimestamp()
を選びましょう。
タイムゾーンを意識するなら、pytz
やzoneinfo
モジュールの併用が安全です。
日付からミリ秒へ変換する
特定の日付をミリ秒に変える場合はtimestamp()
が便利です。
import datetime
dt = datetime.datetime(2025, 8, 16, 12, 0, 0)
ms = int(dt.timestamp() * 1000)
print(ms) # 1755336000000
ただし、タイムゾーンを持たないdatetime
はローカル時間で計算されます。
UTC基準での計算が必要なら、必ずタイムゾーン付きのオブジェクトを用意しましょう。
よくあるミスと対策
エポックミリ秒を扱う上で特に多いのが、秒とミリ秒の取り違えです。
10桁なら秒、13桁ならミリ秒と覚えると間違いを減らせます。
また、以下の点にも注意しましょう。
- ローカル時刻とUTC時刻の差を考慮する
- API仕様で単位を必ず確認する
- 単位変換時の桁数を検証する
項目 | 秒(Epoch Seconds) | ミリ秒(Epoch Milliseconds) |
---|---|---|
桁数の目安 | 10桁(例: 1723800000) | 13桁(例: 1723800000000) |
単位 | 秒 | ミリ秒(1秒=1000ミリ秒) |
精度 | 1秒単位 | 1ミリ秒単位 |
主な用途 | 多くのUNIX系システム、古いAPI | JavaScriptのDate、精密なログ記録 |
Pythonでの取得例 | int(time.time()) | int(time.time() * 1000) |
変換の注意点 | ミリ秒に変換するには ×1000 | 秒に変換するには ÷1000 |
体験談:単位の取り違えで発生した不具合
過去にAPI連携で、秒単位の値をミリ秒と誤解して処理したことがあります。
結果、本来は2023年のデータが1970年付近として表示される事態に。
原因は桁数チェックを省略したためで、以降は処理前に必ず単位を判別する仕組みを追加しました。
まとめ
Pythonでエポックミリ秒を扱う際は、単位やタイムゾーンの違いを意識することが大切です。
今回のサンプルを押さえておけば、ログ解析やAPI開発など幅広い場面で活用できるでしょう。