web-dev-qa-db-ja.com

タイムゾーンを調整して `strftime`する方法は?

私はdatetimeintUTCを次のように保存します。

_import pytz, datetime

timeUTC = datetime.datetime(2013, 5, 23, 19, 27, 50, 0)
timezoneLocal = pytz.timezone('Europe/Vilnius')

timeLocal = timezoneLocal.localize(timeUTC)
_

しかし、私がそれを印刷しようとすると、それは私に通常のUTC時間を与えるだけです

_>>> timeLocal.strftime('%H:%M:%S')
'19:27:50'
_

これは現地時間であるため、これは_'22:27:50'_を返すと思います(pytz.timezone('Europe/Vilnius')は現時点では+3です)。ここで何が欠けていますか?

15
Morgan Wilde

日付文字列をUTC日時としてローカライズし、astimezoneを使用してローカルタイムゾーンに変換します。

import pytz, datetime

timeUTC = datetime.datetime(2013, 5, 23, 19, 27, 50, 0)
timezoneLocal = pytz.timezone('Europe/Vilnius')
utc = pytz.utc
timeLocal = utc.localize(timeUTC).astimezone(timezoneLocal)
print(timeLocal)
# 2013-05-23 22:27:50+03:00

localizeconvert datetimesではなく、日付文字列をそのタイムゾーンで記述されているかのように解釈します。 localizeは、単純な日時(timeUTCなど)からタイムゾーン対応の日時を作成します。 astimezoneは、タイムゾーン対応の日時を他のタイムゾーンに変換します。

23
unutbu