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記録に多用されています。

Try It — Timestamp Converter

フルツールを開く