Почему Rails хранит время в UTC? - PullRequest
4 голосов
/ 08 марта 2012

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

Каковы некоторые из преимуществ этого подхода?Есть ли недостатки? Есть ли способ заставить Rails использовать другой часовой пояс?

I думаю, некоторые из преимуществ могут быть:

  • UTC устраняет неоднозначности сезонных изменений времени
  • Вы можете представлять разные часовые пояса разным пользователям, сохраняя согласованность в базе данных

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

1 Ответ

7 голосов
/ 08 марта 2012

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

Всегда храните даты в однозначной форме. Хранение даты в формате UTC является в значительной степени стандартом в этом отношении.

Преимущества:

  • Вы можете делать простые математические операции с датой и временем в базе данных без необходимости их преобразования.
  • Вы можете настроить отображение дат на уровне представления
  • Веб-приложения могут использовать немного JavaScript для отображения местного времени

Недостатки:

  • Вам необходимо преобразовать все время в некоторое «местное» время на дисплее
  • Местное время <-> Преобразование UTC влечет за собой небольшой штраф за обработку

Можете ли вы заставить рельсы делать что-то другое? Возможно, но я никогда не пытался, так как это было слишком много работы, чтобы бороться с тем, что ИМХО было разумным дизайном.

Имеет ли смысл использовать UTC в смысле «просто используй мой часовой пояс»? Да. Ваш сервер может быть в Калифорнии, ваши пользователи в Нью-Йорке, и кто решает, какое местное время в этом случае. Сервер? Пользователи? Майк, кто случайно оказался в Лондоне на неделе в командировке? В этом случае какой часовой пояс вы используете?

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