mysql - Rails 时区 VS MySQL 时区

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

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

但是这些名称与 MySQL 中的名称不同,MySQL 中的相同时区为“Europe/Paris”。

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

棘手的部分是,由于多种原因,我必须使用默认的 Rails 帮助程序,并且在我的模型中我必须使用 MySQL 时区。 所以我不能在模型中使用 Ruby 时区,也不能使用 MySQL 时区列表来代替 Rails 帮助器...... 我真的需要一种从第一个转换到后者的方法。

有什么想法吗?

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

最佳答案

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

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。

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

关于mysql - Rails 时区 VS MySQL 时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7633922/

相关文章:

mysql - 带破折号的子字符串索引

mysql - SELECT *, sum() 等式仅返回一行

php - 如何选择MAX(updateTag)

ruby - 如何在 Sequel Postgresql 迁移中定义 ARRAY 列?

ruby - 快速排序不适用于稍大的数组大小

ruby-on-rails - Capistrano::Configuration:Class 的未定义方法 `instance'

MYSQL - 即将到来的 X 出生日期

ruby - 如何通过 Rack 提供静态文件?

ruby-on-rails - Heroku Rails 3.1 应用程序 - 在本地编译 Assets 与在 slug 编译期间编译 Assets

ruby-on-rails - rails/bootstrap 删除链接问题 : data-method delete not working