Временная зона в базе данных Rails / Activerecord - PullRequest
6 голосов
/ 14 июля 2010

У меня есть база данных, которая записывается приложением, отличным от rails, и считывается приложением rails.В базе данных есть поле даты и времени, а данные, хранящиеся в этом поле, хранятся в восточном времени.В моем приложении rails я понимаю, что могу установить часовой пояс приложения в своем файле environment.rb, выполнив config.time_zone = 'Eastern Time (US & Canada)'.Тем не менее, rails предполагает, что данные, хранящиеся в базе данных, хранятся в UTC и преобразуются из config.time_zone в UTC по мере извлечения информации из базы данных и из нее.

Есть ли способ сообщить рельсам данные в этом конкретном поле или даже во всех моих полях даты и времени по восточному времени, а не по Гринвичу?

Ответы [ 3 ]

8 голосов
/ 09 сентября 2011

На Rails 3.0.5 в application.rb, это работает:

config.time_zone = 'Central Time (US & Canada)'
config.active_record.default_timezone = :local
1 голос
/ 29 декабря 2010

config.active_record.default_timezone - Указывает ActiveRecord интерпретировать время базы данных как находящееся в указанном часовом поясе и использовать этот часовой пояс для работы с атрибутами create_at & updated_at.

0 голосов
/ 14 июля 2010

Мое первое предложение - исправить другое приложение.Другое приложение должно хранить смещение UTC с датой.Если вы попытаетесь обойти проблему, вы просто создадите больше.Например, что происходит, когда уходит летнее время, и изменится ли смещение?

Как говорится, у меня нет другого выбора - я бы сделал что-то в этом духе для поля created_at:

def created_at_in_eastern
  DateTime.parse(self.created_at.strftime("%D  %T EST")) if self.created_at
end

или вы можете использовать EDT в зависимости отданные сохранены, просто прочитайте заявление об отказе сверху - это взлом!

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