Как "strftime" настроить часовой пояс?

Я сохраняю свой datetime int UTC следующим образом:

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 в данный момент). Что мне здесь не хватает?

Ответ 1

Локализовать строку даты как дату и время 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

localize не преобразует datetimes, он интерпретирует строку даты так, как если бы она была написана в этом часовом поясе. localize строит дату и время, зависящие от времени, из наивного datetime (например, timeUTC). astimezone преобразует временные интервалы, относящиеся к часовому поясу, к другим часовым поясам.