Преобразования Timzone только по дате и времени - нужно ли это? - PullRequest
1 голос
/ 09 ноября 2010

Мы работаем над внедрением поддержки часовых поясов для нашего веб-приложения.

Этот замечательный пост SO помог нам нам: Летнее время и лучшие рекомендации по часовым поясам

Мы внедрили базу данных OLSON TZ в MYSQL и используем ее для преобразований TZ.

Мы создаем приложение для планирования так:

Мы сохраняем все наши заказы, которые происходят в определенную дату в определенное время в UTC, в полях DateTime и преобразуем их, используя CONVERT_TZ(). Это прекрасно работает.

То, в чем мы не так уверены, это такие вещи, как каникулы и перерывы:

Каникулы - это просто ссылки на дату и не включают временную часть. Поскольку CONVERT_TZ() не работает с объектами даты, мы предполагаем, что лучше всего сохранить значение даты в соответствии с часовым поясом пользователя?

id1 id3 startDate   endDate
-----------------------------
3   6   2010-12-25  2011-01-03
4   3   2010-09-22  2010-09-26

То же самое с повторяющимися перерывами во время хранения для каждого дня недели. В настоящее время мы храним их перерывы с индексами 0-6 для каждого дня недели. Поскольку это просто объекты времени, мы не можем использовать CONVERT_TZ () и предполагать, что мы должны просто сохранить их как значения времени в часовом поясе пользователя?

bID sID dayID startTime  endTime
--------------------------------
1   4   1   12:00:00    14:00:00
2   4   4   13:30:00    13:30:00

В этом случае с отпусками и перерывами мы будем сравнивать их только со временем бронирования ПОСЛЕ того, как время бронирования было конвертировано в местное время пользователя.

Это правильный способ обработки вещей, или мы должны хранить оба отпуска и перерывы каким-либо другим способом, чтобы мы могли преобразовать их в UTC (не уверен, как это будет работать для перерывов).

Спасибо за вашу помощь!

Ответы [ 2 ]

1 голос
/ 16 ноября 2010

Два формата хранения выглядят нормально. Вам просто нужно преобразовать их в местное время пользователя, когда вы вытаскиваете их из таблицы.

На самом деле, для таблицы перерывов я предполагаю, что они уже номинально по местному времени, так что вы просто сравниваете непосредственно с местным временем встречи.

0 голосов
/ 16 ноября 2010

Я недостаточно хорошо понимаю ваш вопрос, чтобы сказать, что мой ответ на 100% правильный для вас.Но я думаю, что вам нужно сохранить DateTime в «местное» время, а также сохранить часовой пояс.Таким образом, вы исправите это, даже если смена летнего времени (что происходит).

Хорошая статья на http://blogs.windwardreports.com/davidt/2009/11/what-every-developer-should-know-about-time.html (да, мной).

...