Python timeモジュール
PythonのtimeモジュールとdatetimeモジュールによるUnix timestamp操作ガイド。time.time()、変換、フォーマット、タイムゾーン処理を解説。
Language
time.time()
詳細な説明
Pythonにはtimestamp操作のための主要なモジュールが2つあります。低レベルのUnix timestamp操作用のtimeと、高レベルの日付操作用のdatetimeです。time.time()関数は、現在のUnix timestampを浮動小数点の秒数として返します。
現在のtimestampの取得:
import time
from datetime import datetime, timezone
# epochからの秒数(浮動小数点)
time.time() # 1700000000.123456
# 整数の秒
int(time.time()) # 1700000000
# datetimeを使用
datetime.now(timezone.utc).timestamp() # 1700000000.123456
timestampから日付への変換:
# timestamp → datetime (UTC)
dt = datetime.fromtimestamp(1700000000, tz=timezone.utc)
# datetime(2023, 11, 14, 22, 13, 20, tzinfo=timezone.utc)
# 警告:tzなしだとローカルタイムゾーンを使用
datetime.fromtimestamp(1700000000) # ローカル時刻 — 避けるべき
# timestamp → フォーマット済み文字列
dt.strftime("%Y-%m-%d %H:%M:%S") # "2023-11-14 22:13:20"
dt.isoformat() # "2023-11-14T22:13:20+00:00"
日付からtimestampへの変換:
# 文字列からtimestamp
from datetime import datetime, timezone
dt = datetime(2024, 1, 15, 9, 30, 0, tzinfo=timezone.utc)
dt.timestamp() # 1705310600.0
# ISO形式文字列からtimestamp (Python 3.7+)
dt = datetime.fromisoformat("2024-01-15T09:30:00+00:00")
dt.timestamp()
重要な落とし穴 — naiveとawareのdatetime: タイムゾーン情報のないdatetimeオブジェクトは「naive」と呼ばれます。naiveなdatetimeで.timestamp()を呼び出すとローカル時刻を仮定するため、サーバーによって異なる結果を生みます。tz=timezone.utcを渡すか、zoneinfo.ZoneInfo(Python 3.9以降)を使用して、常にタイムゾーンawareなdatetimeを使いましょう。
パフォーマンス計測: ベンチマークには、time.time()の代わりにtime.perf_counter()またはtime.monotonic()を使用してください。これらの単調クロックはNTP調整や手動のクロック変更の影響を受けないため、経過時間の計測に信頼性があります。
ユースケース
Pythonのtimeモジュールは、バックエンドサービスでキャッシュTTLの計算、タスクのスケジューリング、オブザーバビリティパイプライン用の構造化ログへのtimestamp記録に多用されています。