2012-02-10 4 views
0

У меня есть приложение Rails, которое хранит значения времени, и я установил часовой пояс в config/application.rb.Rails тип времени и часовые пояса

Это правильно работает с столбцами datetime, но столбцы времени показывают время в UTC, а не в указанном часовом поясе.

Время, указанное в этих двух примерах, хранится как 20:50 (UTC) в базе данных, но когда я показываю его в виде, то в столбце времени отображается как UTC, а столбец datetime отображается правильно в выбранном часовом поясе ,

time2:  2000-01-01 20:50:00 UTC 
datetime2: 2012-02-09 21:50:00 +0100 

Ожидается ли такое поведение? Должны ли временные типы также использовать настроенный часовой пояс?

ответ

2

ActiveRecord использует TimeWithZone, где такие методы, как localtime, utc, utc? может помочь вам.

+0

Так что, если атрибут времени типа, он не автоматически преобразуется в заданное время зоны в окне, но вы должны написать что-то вроде <% = и. time2.localtime%>? Но атрибуты datetime автоматически преобразуются, и вы можете просто ввести <% = u.datetime2%>. Почему разница двух типов? – Atle

0

Да, это ожидаемое поведение. Rails (ActiveRecord) хранит время в UTC, затем скрывает их до любого временного диапазона Time.zone, установленного при визуализации в представлении.

+0

Да, я знаю, что, как я сказал в вопросе, я установил часовой пояс, и оба приведенных выше примера хранятся в базе данных в формате UTC (20:50), но когда показано в представлении, только атрибут datetime преобразуется в часовой пояс. Не активирует ли атрибуты времени ActiveRecord? Только атрибуты datetime? – Atle

+0

Ну, дата не должна (не будет) иметь связанный с ней часовой пояс. Только время или время. Так что да, это имеет смысл. –

+0

Я ничего не говорил о дате, просто времени и времени. Еще раз, как я сказал в вопросе, я настроил часовой пояс, и у меня есть один раз и один день, хранящийся в формате UTC в базе данных, но когда я показываю их в таком виде: <% = u.time2%> и <% = u.datetime2%> только атрибут datetime преобразуется в часовой пояс. – Atle

0

Я отказываюсь от этого, Rails, кажется, полностью игнорирует config.time_zone с атрибутами времени и просто использует его для атрибутов datetime по причинам, которые я не понимаю. И, как кажется, мало кто это понимает.

Я буду менять атрибуты времени, чтобы набирать строку и анализировать ее на объект времени, когда мне нужно работать с ним как объект времени. Если это исправлено в более поздней версии Rails, я всегда могу вернуться к использованию атрибутов времени, но теперь мне нужно продолжить, это удерживало меня в течение нескольких дней.

Но спасибо за попытку помочь :)