Как сохранить часовой пояс в SQL Server 2005 - PullRequest
7 голосов
/ 01 декабря 2009

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

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

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

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

Ответы [ 3 ]

10 голосов
/ 01 декабря 2009

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

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

5 голосов
/ 01 декабря 2009

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

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

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

0 голосов
/ 01 декабря 2009

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

Иначе я бы использовал tinyint.

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