Как сохранить часовой пояс в SQL Server 2005

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

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

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

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

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

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

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

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

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

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

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

  • TimeZoneCode to TimeZoneInfo
  • Определите текущий статус DST, когда я не наблюдаю DST в своем часовом поясе (SQL Server)
  • Время локального отображения Azure SQL
  • Есть ли надежный способ конвертировать unzoned datetime в UNIX time_t?
  • Сохранять текущее время в соответствии с часовым поясом клиентской стороны в sqlServer
  • История MS SQL Server для TimeZones и DST (нужно ли изобретать колесо?)
  • Давайте будем гением компьютера.