Как перевести (а не преобразовать) время в новый часовой пояс? - PullRequest
2 голосов
/ 11 января 2011

У меня есть DateTime d и строка tz, которая является действительным ключом ActiveSupport :: TimeZone (например, «UTC», «Восточное время (США и Канада)», «Америка / Чикаго» и т. Д.),Как мне получить новый DateTime d2 такой, чтобы все было одинаково, но смещение d2 теперь отражает смещение часового пояса, соответствующего tz?

Обратите внимание, что я не хочуконвертировать время в новый часовой пояс.Я хочу новый DateTime со всеми остальными равными, но с другим смещением.

Например, если у меня есть d = <today @ 5:00 PM UTC> и tz = 'Central Time (US & Canada)', то, что я хочу, это d2 = <today @ 5:00 PM -0600>, не d2 = <today @ 11:00 AM -0600>.

1 Ответ

1 голос
/ 11 января 2011

Учитывая tz, вы можете преобразовать это в смещение в виде доли дня:

offset = ActiveSupport::TimeZone.new(tz).utc_offset / 60 / 60 / 24.0
=> -0.25 # for 'Central Time (US & Canada)'

Затем вы можете передать это в DateTime.civil вместе с существующими деталями из d для созданияновый объект:

d2 = DateTime.civil(d.year, d.month, d.day, d.hour, d.min, d.sec, offset)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...