2009-12-01 2 views
7

Я строю веб-приложение, в котором пользователи могут вводить события, в том числеКак хранить часовой пояс в SQL Server 2005

  • название события
  • дата/время начала
  • описание

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

В базе данных базы данных SQL Server я использую datetime для даты/времени начала. Какой тип столбца следует использовать для хранения часового пояса? Int? плавать? десятичная дробь?

+0

Какая версия SQL Server? SQL Server 2008 имеет datetimeoffset ... – mkedobbs

+0

SQL Server 2005 – frankadelic

+0

См. Конкретно «Часовой пояс! = Смещение» в [теге wiki времени] (http://stackoverflow.com/tags/timezone/info). Часовой пояс не может быть полностью представлен просто числом. –

ответ

10

Временные интервалы являются сложными, злыми. Обычно они хранятся как смещение UTC, но даже это имеет проблемы с такими вещами, как, например, при изменении летнего времени (если вообще).

Если вы используете Sql Server 2008, вы можете использовать тип datetimeoffset, который включает в себя смещение utc со значением. В противном случае вам понадобятся два столбца.

+0

Ух, имел 'datetime2' изначально. всегда путайте, что для datetimeoffset :( –

0

Если вы используете SQL Server 2008, вы можете использовать datetimeoffset вместо datetime.

В противном случае, я бы использовал tinyint.

+2

TINYINT может быть недостаточно большой. Есть буквально сотни часовых поясов по всему миру, потому что каждое небольшое место захочет почувствовать себя важным и решить, что их дневной свет меняется в полдень на следующий день после всех остальных и т. Д. В настоящее время база данных показывает 245 отдельных часовых поясов. Это будет вписываться в TINYINT, но едва. –

5

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

Сохраненные значения должны быть значениями из свойства TimeZoneInfo ID (например, «Восточное стандартное время»), чтобы вы могли легче выполнять вычисления в .NET Framework.

Как сказал Джоэл, часовые пояса являются злыми и хитрыми. Удачи ...

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