Ответ 1
Это должно работать нормально:
Time.use_zone('Hawaii') do
p Time.zone.now
end
Так что прямо сейчас это 2:54 вечера PST в Сан-Франциско. По какой-то причине этот кодовый блок не возвращается 12:54 PM HST на Гавайях. Я что-то упустил? Я бы ожидал, что этот код вернет мне текущее время на Гавайях
Time.use_zone('Hawaii') do
Time.now
end
# => 2012-01-03 14:54:54 -0800
Это должно работать нормально:
Time.use_zone('Hawaii') do
p Time.zone.now
end
Попробуйте использовать Time.now.in_time_zone
внутри своего блока.
> Time.use_zone('Hawaii') do
> Time.now.in_time_zone
> end
=> Tue, 03 Jan 2012 13:07:06 HST -10:00
Используйте Time.current
, если хотите now
с поддержкой часового пояса. Time.now
является опасным при работе в приложении, зависящем от часового пояса. Как правило, я никогда не использую Time.now
, только Time.current
. Помощники времени Rails, такие как 2.hours.ago
и 4.days.from_now
, также основаны на Time.current
.
Кроме того, это отличная статья с большим чит-листом внизу: http://www.elabs.se/blog/36-working-with-time-zones-in-ruby-on-rails
Time.now - использование времени сервера
Time.zone.now - использование времени приложения rails (в config: config.time_zone)
Time.use_zone - использование "вашего" часового пояса для заданного блока
Этот пример неверен, потому что Time.now получает время в вашем часовом поясе сервера и метод in_time_zone переводит время в эквивалентное время в часовой пояс Гавайских островов. Но это не текущее время на Гавайях! Это ваше время сервера с utc для Гавайев.
Time.use_zone('Hawaii') do
Time.now.in_time_zone
end
=> Wed, 14 Aug 2013 10:33:18 HST -10:00
Time.now.in_time_zone
=> Thu, 15 Aug 2013 00:32:30 MSK +04:00
Для получения времени в часовом поясе Гавайи вы должны использовать
Time.use_zone('Hawaii') do
Time.zone.now
end