pytz-преобразование UTC и часового пояса в местное время

у меня есть datetime в часовом поясе UTC, например:

utc_time = datetime.datetime.utcnow()

и объект часового пояса pytz:

tz = timezone('America/St_Johns')

каков правильный способ преобразования utc_time к данному часовому поясу?

6 ответов


кажется, я понял:

pytz.utc.localize(utc_time, is_dst=None).astimezone(tz)

эта строка сначала преобразует наивный (часовой пояс не знает)utc_time datetime объект datetime объект, содержащий часовой пояс (UTC). Затем он использует astimezone функция для того чтобы отрегулировать время согласно спрошенному часовому поясу.


могу ли я рекомендовать использовать стрелка? Если я правильно понял вопрос:--5-->

>>> import arrow
>>> utc = arrow.utcnow()
>>> utc
<Arrow [2014-08-12T13:01:28.071624+00:00]>    
>>> local = utc.to("America/St_Johns")
>>> local
<Arrow [2014-08-12T10:31:28.071624-02:30]>

вы также можете использовать

tz.fromutc(utc_time)

это точная цель fromutc функция:

tz.fromutc(utc_time)

(


Я согласен с ответом Цаха. Просто хотел включить, что параметр is_dst не требуется:

pytz.utc.localize(datetime.utcnow()).astimezone(tz)

этот код преобразует текущее время UTC в часовой пояс с текущим временем datetime.

в то время как код ниже преобразует текущее время UTC в часовой пояс, знающий datetime, который не обязательно является текущим. Часовой пояс просто добавляется в значение времени UTC.

tz.localize(datetime.utcnow())

еще один очень простой способ:

, потому что utcnow метод возвращает наивный объект, поэтому вам нужно преобразовать наивный объект в курсе


вы также можете использовать образец ниже, я использую его для аналогичной задачи

tz = pytz.timezone('America/St_Johns')
time_difference=tz.utcoffset(utc_time).total_seconds() #time difference between UTC and local timezones in 5:30:00 format
utc_time = date + timedelta(0,time_difference)

Он работает быстро, и вам не нужно импортировать дополнительные библиотеки.