JST(日本時間)を zoneinfo で扱う

一言まとめ

datetime は naive と aware を混ぜない。JST は zoneinfo.ZoneInfo("Asia/Tokyo") で aware に揃えて扱う。

作成 · 更新 · #python#datetime#timezone

datetime にはタイムゾーン情報を持たない naive と、持っている aware の2種類があります。混ぜて比較すると TypeError: can't compare offset-naive and offset-aware datetimes で落ちるので、受け取った時点で aware に揃えます。

from datetime import datetime
from zoneinfo import ZoneInfo
JST = ZoneInfo("Asia/Tokyo")
now = datetime.now(JST)
parsed = datetime.fromisoformat("2026-06-24T18:00:00").replace(tzinfo=JST)

zoneinfo は標準ライブラリ(Python 3.9以降)で、pytz を入れる必要はありません。既にある naive を変換するときは replace(tzinfo=...)、aware を別ゾーンに移すときは astimezone(...) と使い分けます。

datetime.utcnow() は UTC の時刻を naive で返すので使いません。tzinfo が付いていないのに UTC のつもりで扱われる、という一番ややこしい形になります。Python 3.12 で非推奨になりました。UTC が要るなら datetime.now(timezone.utc) です。

更新履歴#

  • 2026-06-24: 初版(memos から移行)
  • 2026-10-09: タイトルを概念名に揃え、tags を補う

同じトピック — Python