Ruby: tzinfo: местное время для других юрисдикций, включая смещение часового пояса и политику перехода на летнее время - PullRequest
0 голосов
/ 27 марта 2012

Из моего последнего вопроса я теперь знаю, как получить доступ к гему tzinfo. Однако я не знаю, как использовать его в своих целях.

Предположим, мне нужно отправлять электронную почту человеку в Бужумбуре, Бурунди, каждое утро в 8:00 в любой комбинации часового пояса и летнего времени, которая применяется к Бужумбуре каждый день. Насколько я понимаю, tzinfo "знает" информацию. Можно ли конвертировать 8:00 утра по времени Бужумбуры (включая переход на летнее время) в UTC для каждого дня года? Я хотел бы сделать что-то вроде:

require 'tzinfo'
bz = TZInfo::Timezone.get('Africa/Bujumbura')
#bujumbura_time=????
bujumbura_utctime=tz.local_to_utc(bujumbura_time)

Как мне закодировать время bujumbura_time, чтобы отразить, что по времени Бужумбуры 8:00 утра?

1 Ответ

2 голосов
/ 27 марта 2012

Не думаю, что вам нужно bujumbura_time знать о конкретном часовом поясе.Вместо этого вы создаете местное время, которое затем можно преобразовать в UTC вместе с часовым поясом:

require 'tzinfo'
bz = TZInfo::Timezone.get('Africa/Bujumbura')
bujumbura_time = Time.local(2012, 3 ,27, 8, 0, 0)
bujumbura_utctime = bz.local_to_utc(bujumbura_time)

Обратите внимание, что преобразование из местного времени в UTCможет быть неудобно из-за перехода на летнее время - когда часы идут вперед, час (обычно) местного времени полностью пропускается, а когда часы возвращаются назад, часть местного времени встречается дважды.Вы должны решить, что вы хотите, чтобы произошло в таких ситуациях.(Документация local_to_utc объясняет ваши варианты.)

...