Мои created_at
временные метки хранятся в UTC:
>> Annotation.last.created_at
=> Sat, 29 Aug 2009 23:30:09 UTC +00:00
Как перевести один из них на «восточное время (США и Канада)» (с учетом летнего времени)? Что-то вроде:
Annotation.last.created_at.in_eastern_time
ruby-on-rails
ruby
datetime
Том Леман
источник
источник
now.in_time_zone(3)
created_at.in_time_zone("EST")
корочеХотя это старый вопрос, о нем стоит упомянуть. В предыдущем ответе предлагалось использовать before_filter для временной установки часового пояса.
Вы никогда не должны этого делать, потому что Time.zone хранит информацию в потоке, и, вероятно, она попадет в следующий запрос, обрабатываемый этим потоком.
Вместо этого вы должны использовать around_filter, чтобы убедиться, что Time.zone сбрасывается после завершения запроса. Что-то вроде:
Подробнее об этом читайте здесь
источник
Если вы добавите это в свой
/config/application.rb
Тогда вы можете сотовый
чтобы получить время в указанном часовом поясе.
источник
Если вы настроите свой
/config/application.rb
источник
Установите часовой пояс на восточное время.
Вы можете установить часовой пояс по умолчанию в config / environment.rb
Теперь все извлеченные вами записи будут в этом часовом поясе. Если вам нужны разные часовые пояса, скажем, на основе часового пояса пользователя, вы можете изменить его с помощью before_filter в вашем контроллере.
Просто убедитесь, что вы все свое время храните в базе данных как UTC, и все будет хорошо.
источник
Time.zone=
является потокобезопасным github.com/rails/rails/blob/master/activesupport/lib/… .