Rails:将UTC DateTime转换为另一个时区

在Ruby / Rails中,如何将UTCdate时间转换为另一个时区?

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 

尝试使用TimeZone处理ActiveSupport的TimeWithZone对象。 ActiveSupport还提供了将UTC时间转换为指定的时区时区的in_time_zone方法。 mckeed的答案显示了代码。

以防万一,如果你在Rails中处理ActiveRecord对象。

Time.use_zone用于覆盖在config.time_zone设置的默认时区的每个请求基准时区可能是一个好主意

更多细节我在https://stackoverflow.com/a/25055692/542995解释;

我在Rails 4中使用simple_form,我只是添加了input字段

 <%= f.input :time_zone, :as => :time_zone %> 

与迁移

 class AddTimeZoneColumnToTextmessage < ActiveRecord::Migration def change add_column :textmessages, :time_zone, :string end end