Rails 时区 VS MySQL 时区

发布于 2024-12-08 02:29:32 字数 494 浏览 0 评论 0原文

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

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

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

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

有什么想法吗?

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

In my Rails (3.0) application, I use timezones using the helper time_zone_select().
It generates timezone names like "(GMT+01:00) Paris"...

But these names are different from those in MySQL, where the same timezone would be "Europe/Paris".

How can I convert Rails timezones to MySql ones ?

The tricky part is that for several reasons I have to use the default Rails helper, and in my models I have to use the MySQL timezones.
So I can't use Ruby timezones in my models, and I can't use a list of MySQL timezones instead of the Rails helper...
I really need a way to convert from the first to the latter.

Any idea?

Edit: I'm currently trying to use ActiveSupport::TimeZone[(ruby_timezone)].tzinfo.name, is there a better way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心的憧憬 2024-12-15 02:29:32

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

ActiveSupport::TimeZone[ruby_timezone].tzinfo.name

Romain 提示可能有一些 Rails 时区不受 MySQL 支持,所以我在控制台中测试了以下内容,答案是:它们都有效:)

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 不支持时区,则它会返回零。

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

Okay, I finally found a way :

ActiveSupport::TimeZone[ruby_timezone].tzinfo.name

Romain suggested there may be some Rails timezones not supported by MySQL, so I tested the following in the console, and the answer is: they all work :)

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

If a timezone was not supported by MySQL, it would have returned nil.

I don't know if there is a better way, but at least it works :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文