サードパーティのモジュールであるpytzは、タイムゾーン間で変換する簡単な方法を提供します。例えば、
import datetime as dt
import pytz
utc = pytz.utc
western = pytz.timezone('US/Pacific')
newyork = pytz.timezone('America/New_York')
chicago = pytz.timezone('America/Chicago')
誰かがニューヨークで午前10時に予定を作成するとします。
date = dt.datetime(2012, 8, 12, 10) # naive datetime
print(date)
# 2012-08-12 10:00:00
# localize converts naive datetimes to timezone-aware datetimes.
date_in_newyork = newyork.localize(date) # timezone-aware datetime
print(date_in_newyork)
# 2012-08-12 10:00:00-04:00
西海岸のサーバーは、この日時をUTCで保存する必要があります。
# astimezone converts timezone-aware datetimes to other timezones.
date_in_utc = date_in_newyork.astimezone(utc)
print(date_in_utc)
# 2012-08-12 14:00:00+00:00
これで、シカゴの人が予定の時刻を知りたい場合、サーバーはUTCをシカゴの時刻やニューヨークの時刻などに変換できます。
date_in_chicago = date_in_utc.astimezone(chicago)
print(date_in_chicago)
# 2012-08-12 09:00:00-05:00
date_in_newyork2 = date_in_utc.astimezone(newyork)
print(date_in_newyork2)
# 2012-08-12 10:00:00-04:00