2012-02-16 8 views
1

Простая вещь, которую я хочу, - сохранить DateTime в UTC в базе данных и снова получить ее в UTC, но рельсы, похоже, предполагают, что я сохранил DateTime в своем локальном часовом поясе и добавляет разницу в 8 часов (ТИХООКЕАНСКОЕ СТАНДАРТНОЕ ВРЕМЯ). У меня есть поле DateTime в моей модели. Если я посылаю запрос (PUT), чтобы обновить это поле в конкретном случае моей модели, как-то часовые пояса перепутать по какой-либо причине:Rails Postgres Обработка часового пояса

Отправки на рельсы через PUT: 2012-02-17T03: 46: 58Z

Возврат через последующие GET: 2012-02-17T11: 46: 58Z

Разница во времени ровно 8 часов и может быть объяснена моим часовым поясом, который является PST (-08: 00).

Я использую Datamapper 1.2 на Rails 3.1.3.

Я установил часовой пояс приложения для настройки в UTC явно.

Я также попытался использовать типы dm-zone. Ничего не изменил для меня.

Git-bisect в моем репо показал, что это неправильное поведение было введено, когда я переключил базу данных на postgres из исходного sqlite. Это commit только изменило database.yml и gemfile. Ничего больше.

Любые идеи?

+0

Вы взглянули на свою базу данных Postgres и посмотрели, что представляет собой необработанное значение базы данных для вашего поля datetime? –

+0

У меня такая же проблема (с использованием «dm-zone-types» прямо сейчас). Я на Синатре, используя Datamapper 1.2 и dm-zone-types 0.3. Время, похоже, хранится как UTC (в соответствии с возвращаемым значением из метода «дамп» в zoned_time.rb), но после его получения часовой пояс - это моя локальная зона с неправильным временем. POST: 2012-02-16 11:25:52 +0100, «CET» Значение в базе: 2012-02-16 10:25:52 +0000, «UTC» GET: 2012-02-16 10:25:52 +0100, "CET" –

+0

Необработанное значение в базе данных "2012-02-17 03:46:58". Это время UTC и значение, которое я хотел бы получить. Где-то между вытаскиванием значения из базы данных и отправкой его клиенту, рельсы, похоже, делают некоторые обманки, которые я не могу понять. Спасибо за ваш вклад! – kaihowl

ответ

2

Я нашел Hacky Раствора себе:

Установите серверы часовой пояс в переменной окружения TZ в «UTC». Для того, чтобы сохраняться этот вариант конфигурации, я решил поставить переменная окружения в конфигурации/boot.rb:

ENV['TZ'] = "UTC" 

Я до сих пор чувствую себя грязным, и это решение до сих пор дает мне дрожь. Поэтому любое лучшее/более чистое решение высоко ценится!

Смежные вопросы