
Pythonで日付や時刻を扱う際に重要なのがタイムゾーンの処理です。
その中でも zoneinfo
は、Python 3.9から標準ライブラリに追加された、タイムゾーン処理のための便利なライブラリです。
この記事では zoneinfo
の基本的な使い方から、活用シーン、注意点までをわかりやすく丁寧に解説します。
zoneinfoとは?
zoneinfo
は、Pythonにおけるタイムゾーン処理のためのライブラリです。
世界各地の時差やサマータイム(夏時間)を考慮した正確な日時計算を行うことができます。
従来使われていた pytz
ライブラリの代替として、Python 3.9以降では標準ライブラリとして利用できるようになりました。
基本的な使い方
まずは、基本的なタイムゾーンの作成と現在時刻の表示を見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
from zoneinfo import ZoneInfo from datetime import datetime # 日本のタイムゾーンを作成 japan_tz = ZoneInfo("Asia/Tokyo") # 現在時刻を日本時間で取得 now_japan = datetime.now(japan_tz) print(f"日本時間: {now_japan}") # アメリカ東海岸の時間も取得 ny_tz = ZoneInfo("America/New_York") now_ny = datetime.now(ny_tz) print(f"ニューヨーク時間: {now_ny}") |
このコードでやっていることは:
ZoneInfo("Asia/Tokyo")
で日本のタイムゾーンを作成datetime.now()
に作成したタイムゾーンを渡して現在時刻を取得- 同様にニューヨークの時間も取得して比較
タイムゾーンの名前は 地域/都市
の形式で指定します。
具体例:時刻変換で使う
zoneinfo
はタイムゾーン間の時刻変換にも頻繁に使われます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
from zoneinfo import ZoneInfo from datetime import datetime # 日本時間で会議の開始時刻を作成 meeting_time = datetime(2024, 3, 15, 14, 0, tzinfo=ZoneInfo("Asia/Tokyo")) print(f"会議開始(日本時間): {meeting_time}") # アメリカ西海岸の時間に変換 la_time = meeting_time.astimezone(ZoneInfo("America/Los_Angeles")) print(f"会議開始(LA時間): {la_time}") # ヨーロッパの時間に変換 london_time = meeting_time.astimezone(ZoneInfo("Europe/London")) print(f"会議開始(ロンドン時間): {london_time}") |
このように:
.astimezone()
でタイムゾーンを変換- 同じ瞬間を異なるタイムゾーンで表示
- 国際会議の時間調整などに便利
この一連の操作で、世界中のメンバーがそれぞれの地域時間で会議時刻を確認できます。
よく使うタイムゾーンの指定例
zoneinfoでは、以下のような形式でタイムゾーンを指定できます。
地域 | 書き方の例 |
---|---|
日本 | "Asia/Tokyo" |
韓国 | "Asia/Seoul" |
中国 | "Asia/Shanghai" |
アメリカ東海岸 | "America/New_York" |
アメリカ西海岸 | "America/Los_Angeles" |
イギリス | "Europe/London" |
ドイツ | "Europe/Berlin" |
UTC | "UTC" |
利用可能なタイムゾーンの一覧は、zoneinfo.available_timezones()
で確認できます。
zoneinfoの主要メソッド
よく使われる主要なクラスやメソッドを以下にまとめます。
機能 | 説明 | 使用例 |
---|---|---|
ZoneInfo(tzname) |
指定したタイムゾーン名(例: "Asia/Tokyo" )の情報を取得 |
ZoneInfo("Asia/Tokyo") |
available_timezones() |
利用可能な全タイムゾーン一覧を取得(Python 3.11以降) | for z in available_timezones(): print(z) |
.astimezone() |
別のタイムゾーンへ日時を変換(datetimeのインスタンスメソッド) | dt.astimezone(ZoneInfo("UTC")) |
たとえば、日本時間をアメリカ時間に変換する場合、次のように書きます。
1 2 3 4 5 6 7 |
from datetime import datetime from zoneinfo import ZoneInfo dt_tokyo = datetime(2025, 9, 2, 15, 0, tzinfo=ZoneInfo("Asia/Tokyo")) dt_ny = dt_tokyo.astimezone(ZoneInfo("America/New_York")) print(dt_ny) |
複雑な日時処理も、zoneinfo
を使えば簡潔に扱えるようになります。
zoneinfoを使うときの注意点
Python 3.9未満では使用不可
zoneinfo
はPython 3.9以降でのみ利用できます。
サマータイム(夏時間)の扱い
サマータイムがある地域では、時刻変換時に注意が必要です。
特に、サマータイムの切り替わり時期付近では予期しない結果になることがあります。
1 2 3 4 5 6 7 8 |
from zoneinfo import ZoneInfo from datetime import datetime # サマータイム切り替え前後の時刻を扱う場合は要注意 ny_tz = ZoneInfo("America/New_York") spring_forward = datetime(2024, 3, 10, 2, 30, tzinfo=ny_tz) # この時刻は存在しない可能性がある(サマータイム開始で時計が進む) |
存在しないタイムゾーンを指定した場合
存在しないタイムゾーン名を指定すると ZoneInfoNotFoundError
が発生します:
1 2 3 4 5 |
try: invalid_tz = ZoneInfo("Invalid/Timezone") except ZoneInfoNotFoundError: print("指定されたタイムゾーンが見つかりません") |
まとめ
今回はPythonの zoneinfo
ライブラリについて紹介しました。
zoneinfo
はタイムゾーンを扱うためのPython標準ライブラリZoneInfo("地域/都市")
の形式でタイムゾーンを指定できる.astimezone()
メソッドで簡単にタイムゾーン変換が可能- サマータイムや存在しないタイムゾーンの扱いには注意が必要
zoneinfo
をマスターすれば、グローバルなWebアプリケーションでの時刻表示や、ログファイルの時刻管理、国際的なスケジューリングシステムなど、様々な場面で正確な時刻処理を行えるようになります。
Pythonで時刻を扱う際の必須知識として、ぜひしっかり理解しておきましょう。