2011-10-03 57 views
2

在我的Rails(3.0)應用程序中,我使用助手time_zone_select()。 它生成像「(GMT + 01:00)巴黎」這樣的時區名稱......Rails時區與MySQL時區

但是這些名稱與MySQL中的名稱不同,其中相同的時區爲「歐洲/巴黎」。

如何將Rails時區轉換爲MySql?

棘手的部分是,有以下幾個原因我使用默認Rails的幫手,並在我的模型使用MySQL時區。 所以我不能在我的模型中使用Ruby時區,而且我不能使用MySQL時區列表而不是Rails幫助程序......我真的需要一種方法將第一個轉換爲第一個。

有什麼想法?

編輯:目前我想請使用ActiveSupport ::時區[(ruby_timezone)] .tzinfo.name,有沒有更好的辦法?

+0

你的方式似乎是正確的我,儘管我可能會擔心Rails的支持MySQL不同時區... – Romain

+0

羅曼:是的,我想知道同樣的事情......我想我會用每個*循環的*來測試每一個。 – Raphael

回答

4

好了,我終於找到了一種方法:

ActiveSupport::TimeZone[ruby_timezone].tzinfo.name 

羅曼認爲有可能是沒有MySQL支持的一些Rails的時區,所以我測試在控制檯下,得到的答覆是:他們所有的工作: )

ActiveSupport::TimeZone.all.each do |ruby_timezone| 
    mysql_timezone = ActiveSupport::TimeZone[ruby_timezone.name].tzinfo.name 
    puts ActiveRecord::Base.connection.execute("select convert_tz('2011-01-01 00:00:00', 'UTC', '#{mysql_timezone}')").first 
    end 
end 

如果MySQL不支持時區,它將返回nil。

我不知道是否有更好的辦法,但至少它的工作原理:)