Рельсовые часовые пояса VS MySQL часовые пояса - PullRequest
2 голосов
/ 03 октября 2011

В моем приложении 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 Ответ

4 голосов
/ 04 октября 2011

Хорошо, я наконец нашел способ:

ActiveSupport::TimeZone[ruby_timezone].tzinfo.name

Ромен предположил, что могут быть некоторые часовые пояса 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 не поддерживал часовой пояс, он бы возвратил ноль.

Я не знаю, есть ли лучший способ, но, по крайней мере, он работает:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...