Rails时区与MySQL时区

Rails时区与MySQL时区,mysql,ruby,ruby-on-rails-3,timezone,Mysql,Ruby,Ruby On Rails 3,Timezone,在我的Rails(3.0)应用程序中,我使用helpertime\u zone\u select()使用时区。 它生成的时区名称如“(GMT+01:00)Paris” 但这些名称与MySQL中的名称不同,MySQL中的时区相同,即“欧洲/巴黎” 如何将Rails时区转换为MySql时区 棘手的部分是,出于几个原因,我不得不使用默认的Rails助手,在我的模型中,我不得不使用MySQL时区。 所以我不能在我的模型中使用Ruby时区,也不能使用MySQL时区列表来代替Rails助手。。。 我真的需要

在我的Rails(3.0)应用程序中,我使用helpertime\u zone\u select()使用时区。 它生成的时区名称如“(GMT+01:00)Paris”

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

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

棘手的部分是,出于几个原因,我不得不使用默认的Rails助手,在我的模型中,我不得不使用MySQL时区。 所以我不能在我的模型中使用Ruby时区,也不能使用MySQL时区列表来代替Rails助手。。。 我真的需要一种从第一种转换到第二种的方法

有什么想法吗


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

好的,我终于找到了一种方法:

ActiveSupport::TimeZone[ruby_timezone].tzinfo.name
Romain建议可能存在一些MySQL不支持的Rails时区,因此我在控制台中测试了以下内容,答案是:它们都可以工作:)

如果MySQL不支持时区,它将返回nil


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

你的方法对我来说似乎是正确的,尽管我可能会担心Rails支持MySQL不支持的时区……罗曼:是的,我也在想同样的事情。。。我想我要用for-each循环测试每一个。
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