Rails时区VS MySQL时区

时间:2011-10-03 10:41:05

标签: mysql ruby ruby-on-rails-3 timezone

在我的Rails(3.0)应用程序中,我使用帮助器 time_zone_select()来使用时区。 它生成时区名称,如“(GMT + 01:00)Paris”......

但这些名称与MySQL中的名称不同,其中相同的时区将是“欧洲/巴黎”。

如何将Rails时区转换为MySql时区?

棘手的部分是由于多种原因我 使用默认的Rails助手,而在我的模型中我来使用MySQL时区。 所以我不能在我的模型中使用Ruby时区,我不能使用MySQL时区列表而不是Rails助手... 我真的需要一种从第一种转换为后者的方法。

有什么想法吗?

编辑:我目前正在尝试使用ActiveSupport :: TimeZone [(ruby_timezone)]。tzinfo.name,有更好的方法吗?

1 个答案:

答案 0 :(得分:4)

好的,我终于找到了办法:

ActiveSupport::TimeZone[ruby_timezone].tzinfo.name

Romain建议可能有一些不支持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。

我不知道是否有更好的方法,但至少它有效:)