🐍 Python

timestamp() / fromtimestamp() でUNIX時刻と変換する

UNIX時刻(エポック秒)は「1970年1月1日 00:00:00 UTCからの経過秒数」で日時を表す数値表現です。API連携やファイルの更新日時など、数値で日時をやり取りする場面でよく使われます。

dt.timestamp()                          # datetimeをUNIX時刻(float)に変換
datetime.fromtimestamp(ts, tz=timezone) # UNIX時刻からdatetimeに変換
from datetime import datetime, timezone

dt = datetime(2026, 8, 10, 9, 0, 0, tzinfo=timezone.utc)
ts = dt.timestamp()
print(ts)
# 1786352400.0
# fromtimestampで往復変換できる(tzを明示するのが安全)
from datetime import datetime, timezone

dt = datetime(2026, 8, 10, 9, 0, 0, tzinfo=timezone.utc)
ts = dt.timestamp()
back = datetime.fromtimestamp(ts, tz=timezone.utc)
print(back)
# 2026-08-10 09:00:00+00:00
print(back == dt)
# True
# UNIXエポック(0)はUTCで1970-01-01 00:00:00
from datetime import datetime, timezone

local_from_ts = datetime.fromtimestamp(0, tz=timezone.utc)
print(local_from_ts)
# 1970-01-01 00:00:00+00:00
timestamp関連の引数
timestamp()に引数無し
awareな日時ならそのタイムゾーン情報を使って正しく変換される。naiveな日時に対しては、実行しているマシンのローカルタイムゾーンとして扱われる(環境依存)
fromtimestamp(ts, tz=...)のtz引数
省略するとローカルタイムゾーンのnaiveな日時になり実行環境に依存するため、明示的にtimezone.utc等を指定するのが安全
💡 AIコードレビュー観点:tz引数を省略したfromtimestampは環境依存

AIが生成したコードでdatetime.fromtimestamp(ts)のようにtz引数を省略していると、実行するサーバーのローカルタイムゾーン設定によって結果の時刻が変わります。開発機(日本時間)では正しく見えても、UTC設定のサーバーにデプロイすると9時間ズレる、という典型的な不具合の原因になります。UNIX時刻を扱うコードではfromtimestamp(ts, tz=timezone.utc)のように明示するか、タイムゾーンのページで解説したawareな日時に統一しましょう。

← Python datetime クイックリファレンス一覧へ戻る / now/todayで現在日時を取得する →