Рельсы: преобразование UTC DateTime в другой часовой пояс



в Ruby / Rails, как мне преобразовать UTC DateTime в другой часовой пояс?

639   6  

6 ответов:

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)

Если 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 

попробовать ActiveSupport это TimeWithZone объекты, управляемые с часовым поясом. ActiveSupport также предоставляет метод in_time_zone для преобразования времени UTC в указанный часовой пояс. ответ маккида показывает код.

на всякий случай, если вы имеете дело с объектом ActiveRecord в Rails.

Это может быть хорошей идеей, чтобы использовать Time.use_zone для часового пояса на основе запроса, который переопределяет часовой пояс по умолчанию, установленный в config.time_zone

более подробно я объясняю в https://stackoverflow.com/a/25055692/542995

в простой Рубин, только с require 'date' используйте new_offset способ:

require 'date'

d=DateTime.parse('2000-01-01 12:00 +0200')
l=d.new_offset('-0700')
u=l.new_offset('UTC')
puts "#{u.strftime('%a %F %T %Z')} ❖ #{l.strftime('%a %F %T %Z')}"

протестировано с ruby 2.3.7, который пришел стандарт на Mac OS X 10.13.

Я использую 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

Comments

    Ничего не найдено.