2014-02-15 51 views
1

我有一个函数应该在特定的时间内(作为UTC输入到数据库中)并在用户的时区中输出可读的12小时格式时间。用户在注册时设置他们的时区。这是函数:如何将时间转换为Rails中的特定时区?

def format_time(time_string) 
    return time_string.to_time.in_time_zone(@org_info.timezone).strftime("%-l:%M %p") 
end 

这就是:

@org_info = Org.where(username: session[:username]).first 

正如你可以看到我想要使用辅助函数in_time_zone但它不会改变在所有输出的时间。我如何正确显示这些时间?

+0

我会使用I18n.localize方法;我写了一篇关于您可能想要阅读的rails和时区的博客文章? http://jessehouse.com/blog/2013/11/15/working-with-timezones-and-ruby-on-rails/ – house9

回答

0

时间可以从字符串被解析为每个使用Time.zone.parse

Time.zone.parse(time_string) 

当前时区,但你需要如下之前设置所需的时区:

Time.zone = 'Mumbai' 

建立后所有解析的时区都将在该时区完成。

我需要为不同的用户有不同的时区,然后在ApplicationController中的before_filter中为用户设置特定的时区。 如: Time.zone = current_user.time_zone#这里TIME_ZONE方法应该CURRENT_USER

返回时区的名字现在,无论你想显示在用户时区时间只需拨打in_time_zone时间对象的方法。 例如:

2.0.0-p353 :003 > Time.zone 
=> #<ActiveSupport::TimeZone:0xa3a75a0 @name="UTC", @utc_offset=nil, @tzinfo=#<TZInfo::TimezoneProxy: Etc/UTC>, @current_period=nil> 
2.0.0-p353 :004 > time = Time.zone.parse('15/02/2014 10:05 AM') 
=> Sat, 15 Feb 2014 10:05:00 UTC +00:00 
2.0.0-p353 :005 > Time.zone = 'Mumbai' 
=> "Mumbai" 
2.0.0-p353 :006 > time = Time.zone.parse('15/02/2014 10:05 AM') 
=> Sat, 15 Feb 2014 10:05:00 IST +05:30 
相关问题