Python 3.9 以降、このモジュールを使用できzoneinfo
ます。
最初にその時間を取得しましょうutcnow()
:
>>> from datetime import datetime
>>> database_time = datetime.utcnow()
>>> database_time
datetime.datetime(2021, 9, 24, 4, 18, 27, 706532)
次に、タイム ゾーンを作成します。
>>> from zoneinfo import ZoneInfo
>>> utc = ZoneInfo('UTC')
>>> localtz = ZoneInfo('localtime')
次に、変換します。タイムゾーン間で変換するには、datetime が現在のタイムゾーンを認識している必要がありますastimezone()
。
>>> utctime = database_time.replace(tzinfo=utc)
>>> localtime = utctime.astimezone(localtz)
>>> localtime
datetime.datetime(2021, 9, 24, 6, 18, 27, 706532, tzinfo=zoneinfo.ZoneInfo(key='localtime'))
Python 3.6 から 3.8 では backports.zoneinfo モジュールが必要です:
>>> try:
>>> from zoneinfo import ZoneInfo
>>> except ImportError:
>>> from backports.zoneinfo import ZoneInfo
残りは同じです。
それより前のバージョンの場合は、 または が必要pytz
ですdateutil
。datutil は zoneinfo と同様に機能します。
>>> from dateutil import tz
>>> utc = tz.gettz('UTC')
>>> localtz = tz.tzlocal()
The Conversion:
>>> utctime = now.replace(tzinfo=UTC)
>>> localtime = utctime.astimezone(localtz)
>>> localtime
datetime.datetime(2010, 12, 30, 15, 51, 22, 114668, tzinfo=tzlocal())
pytz
あいまいな時間を処理しない Python のタイム ゾーン処理の結果である別のインターフェイスがあります。
>>> import pytz
>>> utc = pytz.timezone('UTC')
# There is no local timezone support, you need to know your timezone
>>> localtz = pytz.timezone('Europe/Paris')
>>> utctime = utc.localize(database_time)
>>> localtime = localtz.normalize(utctime.astimezone(localtz))
>>> localtime