Как установить часовой пояс в Ruby 1.8.7?
В следующих примерах системный часовой пояс PST (-8: 00 часов от UTC)
Учитывая время (21 Feb 2011, 20:45
), предположим, что время указано в EST:
#this interprets the time as system time zone, i.e. PST
Time.local(2011,02,21,20,45)
#=> Mon Feb 21 20:45:00 -0800 2011
#this **converts** the time into EST, which is wrong!
Time.local(2011,02,21,20,45).in_time_zone "Eastern Time (US & Canada)"
#=> Mon, 21 Feb 2011 23:45:00 EST -05:00
Но желаемый вывод: Mon Feb 21 20:45:00 -0500 2011
(обратите внимание на -0500 (EST), а не на -0800 (PST) и час тот же, то есть 20
, а не 23
)
ОБНОВЛЕНИЕ (см. Лучшую версию этого ниже)
Мне удалось заставить это работать,но мне это не нравится:
DateTime.new(2011,02,21,20,45).change :offset => -(300.0 / 1440.0)
# => Mon, 21 Feb 2011 20:45:00 +0500
Where
300 = 5 hrs x 60 minutes
1440 = number of minutes in a day
or the "right" way:
DateTime.civil(2011,02,21,20,45,0,Rational(-5, 24))
Вопрос : Теперь, есть ли способ определить точный (т. е. питание для летнего времени и т. д.)Смещение UTC от Time.zone
, чтобы я мог передать его методу изменения?
Ссылка: DateTime::change
метод
ОБНОВЛЕНИЕ (лучшая версия)
Спасибо @ctcherry за помощь!
Определите точную информацию о часовом поясе с Time.zone
:
DateTime.civil(2011,02,21,20,45,0,Rational((Time.zone.tzinfo.current_period.utc_offset / 3600), 24))