Сделка с Birtish летом - PullRequest
       11

Сделка с Birtish летом

6 голосов
/ 12 мая 2019

У меня есть строка даты 18 May 14:30, которая соответствует британскому летнему времени (WEST или UTC+1).Я хотел бы преобразовать его в центральное европейское (летнее) время.

Вот мой код

# from datetime import datetime
# from pytz import timezone

d = '18 May 14:30'
# Attempt 1
dd=datetime.strptime(d, '%d %b %H:%M').replace(year=datetime.now().year, tzinfo=timezone('WET'))
dd.astimezone(timezone('CET'))
# datetime.datetime(2019, 5, 18, 16, 30, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>)
# It should be 15:30, not 16:30

# Attempt 2
dd=datetime.strptime(d, '%d %b %H:%M').replace(year=datetime.now().year, tzinfo=timezone('WET'))
# Same result as above

# Attempt 3
dd=datetime.strptime(d, '%d %b %H:%M').replace(year=datetime.now().year, tzinfo=timezone('Etc/GMT-1'))
dd.astimezone(timezone('CET'))
# datetime.datetime(2019, 5, 18, 15, 30, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>)
# This works

Так что моя проблема в третьей попытке мне пришлось вручную указать GMT-1, тогда как CET автоматически преобразуется в CEST.Я надеялся, что это будет работать одинаково для WET (до WEST).

Кроме того, меня также смущает тот факт, что согласно британской вики летнее время должно быть UTC +1, но мне пришлось установить GMT-1 (так как GMT+1 возвращает 18:30).

1 Ответ

2 голосов
/ 12 мая 2019

В случае, если это кого-то заинтересует, мне удалось найти обходной путь

dd=datetime.strptime(d, '%d %b %H:%M').replace(year=datetime.now().year)
timezone('WET').localize(dd).astimezone(timezone('CET'))
# datetime.datetime(2019, 5, 18, 15, 30, tzinfo=<DstTzInfo 'CET' CEST+2:00:00 DST>)
# Correct result without having to specify the shift

# Let's check with another date (non-summertime)
d = '18 Jan 14:30'
dd=datetime.strptime(d, '%d %b %H:%M').replace(year=datetime.now().year)
timezone('WET').localize(dd).astimezone(timezone('CET'))
# datetime.datetime(2019, 1, 18, 15, 30, tzinfo=<DstTzInfo 'CET' CET+1:00:00 STD>)
# Yay!

Это не очень элегантно, но, по крайней мере, оно делает свою работу.

...