В Ruby/Rails, как мне преобразовать UTC DateTime в другой часовой пояс?
Rails: конвертировать UTC DateTime в другой часовой пояс
Ответ 1
time.in_time_zone(time_zone)
Пример:
zone = ActiveSupport::TimeZone.new("Central Time (US & Canada)")
Time.now.in_time_zone(zone)
или просто
Time.now.in_time_zone("Central Time (US & Canada)")
Вы можете найти имена часовых поясов ActiveSupport, выполнив следующие действия:
ActiveSupport::TimeZone.all.map(&:name)
# or for just US
ActiveSupport::TimeZone.us_zones.map(&:name)
Ответ 2
если Time.zone
это ваш желаемый часовой пояс, вы можете использовать @date.to_time.to_datetime
> @date
=> Tue, 02 Sep 2014 23:59:59 +0000
> @date.class
=> DateTime
> @date.to_time
=> 2014-09-02 12:59:59 -1100
> @date.to_time.to_datetime
=> Tue, 02 Sep 2014 12:59:59 -1100
Ответ 3
Попробуйте ActiveSupport TimeWithZone объекты, обработанные с помощью TimeZone. ActiveSupport также предоставляет метод in_time_zone для преобразования времени UTC в указанный часовой пояс TimeZone. Ответ mckeed показывает код.
Ответ 4
На всякий случай, если вы имеете дело с объектом ActiveRecord в Rails.
Это может быть хорошей идеей использовать Time.use_zone
для часового пояса на основе запроса, который отменяет часовой пояс по умолчанию, установленный в config.time_zone
Подробнее я объясняю в fooobar.com/questions/60191/...
Ответ 5
Я использую simple_form в Rails 4, и я просто добавил поле ввода как
<%= f.input :time_zone, :as => :time_zone %>
с миграцией
class AddTimeZoneColumnToTextmessage < ActiveRecord::Migration
def change
add_column :textmessages, :time_zone, :string
end
end