2014-02-15 72 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 
相關問題