在Ruby / Rails中,如何将UTC日期时间转换为另一个时区?
在Ruby / Rails中,如何将UTC日期时间转换为另一个时区?
Answers:
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)
require 'active_support/time'
。
rake time:zones:all
。另请参阅rake -D time
。在中设置默认时区config/application.rb
。
如果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还提供了in_time_zone方法,用于将UTC时间转换为指定的TimeZone时区。mckeed的答案显示了代码。
以防万一,如果您正在Rails中处理ActiveRecord对象。
最好使用Time.use_zone
按请求为基础的时区,以覆盖在中设置的默认时区config.time_zone
我在https://stackoverflow.com/a/25055692/542995上说明了更多详细信息