我在注册期间收集用户的时区,并使用以下形式(相关部分)存储在数据库中。
<%= a.input :time_zone, collection: ActiveSupport::TimeZone.us_zones.map { |zone| [zone.name, zone.name] }, required: true, label: "Select your time zone" %>
但是,我希望将选择默认为用户的本地时区(基于操作系统),以加快注册过程。我试着用
<%= a.input :time_zone, collection: ActiveSupport::TimeZone.us_zones.map { |zone| [zone.name, zone.name] }, selected: Time.now.zone, required: true, label: "Select your time zone" %>
但它不起作用,因为Time.now.zone是"东部夏令时",而时区名称是"东部时间(US &加拿大)"。是否有办法将Time.now.zone转换为区域名称。
我有办法了
假设您想将时区America/New_York
设置为Time.now
(此处Time.now.zone为BDT)
time = Time.now
offset = ActiveSupport::TimeZone.new('America/New_York').utc_offset()
time = time.in_time_zone("America/New_York")
time += -offset
谢谢j-mcnally