用户模型有time_zone,它存储的是"Pacific Time (US &加拿大)"。
场景:1. Current_user居住在日本时区2. Current_user正在查看生活在"太平洋时间(美国)"的John的个人资料。加拿大)"3.在John的个人资料中,我需要显示当地时间为"太平洋时间(US & &;as 10:01 am
我做了什么?ActiveSupport这样::TimeZone.new (@user.time_zone)。现在返回如下内容2011-09-21 10:01:56 UTC
问题:1. 我如何将这个转换到上午10:01 ?2. 为什么是UTC?
请帮忙
要设置TimeZone,需要使用
Time.zone= @user.time_zone
您可以在application.rb
OTOH,您可以使用use_zone
方法与块
Time.use_zone(@user.time_zone) do
#.... This code will run as if you were in @user.time_zone
end
你可以使用
Time.zone = 'Pacific Time (US & Canada)'
获取本地时间
Time.zone.now #=> Wed, 21 Sep 2011 02:25:08 PDT -07:00
得到10:00 am/pm
Time.zone.now.strftime("%I:%M %p") #=> 02:25 AM
在您的用户控制器中尝试这样做:
def show
@user = find(params[:id])
Time.zone = @user.time_zone
end
更改格式:
Time.now.strftime("at %I:%M%p")
处理时间的理想方法是在后端以UTC格式保存数据,这将使转换过程简单。
正如Chandra Patni上面提到的,您可以使用这些方法进行转换。
要以格式化字符串显示时间对象,您可以使用rails的strftime方法http://apidock.com/rails/ActiveSupport/TimeWithZone/strftime