zoneinfoモジュール
https://docs.python.org/3/library/zoneinfo.htmlからの引用
The zoneinfo module provides a concrete time zone implementation to support the IANA time zone database as originally specified in PEP 615. By default, zoneinfo uses the system’s time zone data if available; if no system time zone data is available, the library will fall back to using the first-party tzdata package available on PyPI.
zoneinfoモジュールは、PEP 615で最初に指定されたIANAタイムゾーンデータベースをサポートするための具体的なタイムゾーン実装を提供します。デフォルトでは、zoneinfoはシステムのタイムゾーンデータを使用します(利用可能な場合)。利用可能なシステムタイムゾーンデータがない場合、ライブラリはPyPIで利用可能なファーストパーティのtzdataパッケージの使用にフォールバックします。
システムのタイムゾーンデータベースの利用
Python3.9からタイムゾーンのライブラリzoneinfoが標準ライブラリに追加されました。
Django4.0からはzoneinfoが標準実装のタイムゾーンライブラリとなりpytzは非推奨となっています。
Django 5.0から pytzはDjangoのサポート対象外となるとのことですので、pytzからzoneinfoに移行をしていった方がよさそうです。
zoneinfoはシステムのタイムゾーンデータベースを利用します。
Windowsシステムなどのタイムゾーンデータベースを利用できない環境ではPyPIからtzdataパッケージをインストールする必要があります。
ライブラリのインストール
pthon3.9からはzoneinfoは標準ライブラリのためライブラリのインストールは必要ありませんが、python3.9より前のバージョンをサポートする場合にはbackportsからインストールする必要があります。
Linuxなどのシステムのタイムゾーンデータベースを利用できるOSの場合
pip install backports.zoneinfo
Windowsなどのシステムのタイムゾーンデータベースを利用できないOSの場合
pip install backports.zoneinfo[tzdata]
サンプル
import datetime from backports import zoneinfo utc_tz = zoneinfo.ZoneInfo('UTC') nowtime = datetime.datetime(2021, 2, 1, 0, 0, 0, tzinfo=utc_tz) #print(f"{utc_tz}: {nowtime}"); tz_list = [] for timezone_value in zoneinfo.available_timezones(): zone = zoneinfo.ZoneInfo(timezone_value) local = nowtime.astimezone(zone) str_local_time = str(local) local_time_len = len(str_local_time) str_local_time = str(str_local_time)[-6:local_time_len] tz_list.append( { 'timezone': str(timezone_value), 'diff': str_local_time, } )