我使用time_zone_select来保存用户时区。
<div class="row">
<div class="panel panel-primary">
<div class="panel-heading">
<%= f.label :time_zone, "TimeZone*" %>
</div>
<div class="panel-body">
<%= f.time_zone_select :time_zone, nil, {}, { :class => 'form-control' } %>
</div>
</div>
</div>
用户时区正在字符串中成功保存。
>> userp.time_zone
=> "Chennai"
现在,当我显示用户时区时,我想像这个一样显示时区偏移
(GMT+05:30) Chennai
这是视图模板,但我无法操作时区,因为它存储为字符串。
<div>
<small>
<i class="fa fa-clock-o" aria-hidden="true"></i>
<span style="padding-left:1px">TimeZone:</span>
<%= @user.time_zone %>
</small>
</div>
有人能指导我,如何用偏移量显示时区吗?
您可以将ActiveSupport::TimeZone
视为具有ActiveSupport::TimeZone[named_zone]
的数组,例如:
<div>
<small>
<i class="fa fa-clock-o" aria-hidden="true"></i>
<span style="padding-left:1px">TimeZone:</span>
<%= ActiveSupport::TimeZone[@user.time_zone].to_s %> <%= @user.time_zone %>
</small>
</div>
您可以在Rails控制台中测试它:
[6] pry(main)> ActiveSupport::TimeZone["Chennai"].to_s
=> "(GMT+05:30) Chennai"
请注意,如果你不使用#to_s
,你会得到TimeZone
对象,这不是你想要的。您可以在Github上看到详细的实现。
稍微相关,如果你想知道为什么这个模块可以被视为一个数组,那是因为它实现了[]()
方法。