在 Ruby/Rails 中,如何将 UTC DateTime 转换为另一个时区?
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)")
You can find the names of the ActiveSupport time zones by doing:
ActiveSupport::TimeZone.all.map(&:name) # or for just US ActiveSupport::TimeZone.us_zones.map(&:name)
尝试使用 TimeZone 操作 ActiveSupport 的 时间与地带对象。ActiveSupport 还提供了 in _ time _ zone 方法,用于将 UTC 时间转换为指定的 TimeZone 时区。Mckeed 的答案显示了密码。
I'm using simple_form in Rails 4 and I just added the input field as
<%= f.input :time_zone, :as => :time_zone %>
随着迁徙
class AddTimeZoneColumnToTextmessage < ActiveRecord::Migration def change add_column :textmessages, :time_zone, :string end end
以防万一,如果您在 Rails 中处理 ActiveRecord 对象。
对于每个请求基准时区使用 Time.use_zone可能是一个好主意,它覆盖在 config.time_zone中设置的默认时区
Time.use_zone
config.time_zone
更多细节我在 https://stackoverflow.com/a/25055692/542995上解释
if Time.zone it's your desired time zone then you can use @date.to_time.to_datetime
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
在纯红宝石中,只使用 require 'date',使用 new_offset方法:
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')}"
使用 MacOSX10.13的标准版 Ruby 2.3.7进行测试。