Rails: конвертировать UTC DateTime в другой часовой пояс - PullRequest
105 голосов
/ 23 апреля 2010

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

Ответы [ 6 ]

196 голосов
/ 23 апреля 2010
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)
6 голосов
/ 02 сентября 2014

, если 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 голосов
/ 31 июля 2014

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

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

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

3 голосов
/ 23 апреля 2010

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

2 голосов
/ 22 сентября 2018

В обычном рубине, только с 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.

0 голосов
/ 19 апреля 2014

Я использую 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...