\

Python 3.9以降、zoneinfoは標準ライブラリの一部として組み込まれています。このモジュールは、PEP 615で最初に指定されたように、IANAタイムゾーンデータベースをサポートする具体的なタイムゾーン実装を提供します。

デフォルトでは、zoneinfoは利用可能な場合にシステムのタイムゾーンデータを使用します。システムのタイムゾーンデータが利用できない場合、ライブラリはPyPIで利用可能な第一パーティのtzdataパッケージを使用するようにフォールバックします。

Python 3.9未満のバージョンを使用している場合、backports.zoneinfoをインストールして代替として使用することができます。これはzoneinfoモジュールのバックポートで、システムのタイムゾーンデータが利用できない場合(特にWindows)、tzdataエクストラを使用することもできます。

pip install backports.zoneinfo

または

pip install backports.zoneinfo[tzdata]

このモジュールは、Python 3.9の標準ライブラリモジュールzoneinfoのドロップイン置換として機能します。Python 3.6以上をサポートしている場合、次のイディオムを使用してbackports.zoneinfoに「フォールバック」することができます。

try:
    import zoneinfo
except ImportError:
    from backports import zoneinfo

このモジュールを使用してタイムゾーンにアクセスするには、ZoneInfoオブジェクトを構築し、それをdatetimeにアタッチします。

from backports.zoneinfo import ZoneInfo
from datetime import datetime, timedelta, timezone

dt = datetime(1992, 3, 1, tzinfo=ZoneInfo("Europe/Minsk"))
print(dt)  # 1992-03-01 00:00:00+02:00
print(dt.utcoffset())  # 2:00:00
print(dt.tzname())  # EET

算術は「正規化」ステップなしで期待通りに動作します。

dt += timedelta(days=90)
print(dt)  # 1992-05-30 00:00:00+03:00
print(dt.utcoffset())  # 3:00:00
print(dt.tzname())  # EEST

曖昧で想像上の時間は、PEP 495で追加されたfold属性を使用して処理されます。

dt = datetime(2020, 11, 1, 1, tzinfo=ZoneInfo("America/Chicago"))
print(dt)  # 2020-11-01 01:00:00-05:00
print(dt.replace(fold=1))  # 2020-11-01 01:00:00-06:00

以上がPythonのzoneinfoモジュールの基本的な使い方になります。タイムゾーンを扱う際には、このモジュールが非常に便利です。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です