Хранение значения c # DateTimeOffset в базе данных SQL Server 2005 - PullRequest
5 голосов
/ 12 октября 2008

Я хочу сохранить значение c # DateTimeOffset в базе данных SQL Server 2005.

Sql 2008 имеет встроенный тип, а SQL Server 2005 - нет.

Структура DateTimeOffset имеет значение DateTime, которое я сохраняю как DateTime, свойство Offset (типа TimeSpan). Поскольку это часовой пояс по отношению к UTC, предположительно он обычно составляет целое количество часов или полчаса.

Предложения о том, как лучше всего хранить это в базе данных SQL Server 2005?

Ответы [ 3 ]

7 голосов
/ 12 октября 2008

Не стоит полагать, что смещение - это количество часов или получас - часовые пояса, безусловно, существуют.

Использование миллисекунд для смещения, возможно, является наиболее гибким, но я бы сказал, что считывать минуты намного проще. Если вы когда-нибудь захотите взглянуть на «необработанные» данные в базе данных, проще понять значение 60 = 1 час, чем 3600000. Я не могу представить, что вам действительно нужны доли минуты в качестве смещения.

4 голосов
/ 15 октября 2008

Нормализовать все DateTimeOffsets к общему смещению, предпочтительно UTC. Затем просто сохраните DateTime как обычно. После извлечения восстановите смещение, которое должно быть постоянным. Это не сохраняет исходное смещение, но в любом случае смещение неоднозначно для часового пояса.

Если вам действительно нужно знать дату / время происхождения, вам нужно будет хранить некоторую информацию о часовом поясе. Это потому, что простое смещение не может однозначно представлять источник времени. Пожалуйста, смотрите (несколько запутанную) документацию MSDN о Выбор между DateTime, DateTimeOffset и TimeZoneInfo .

1 голос
/ 12 октября 2008

сохранить дату и время как дату и время, а смещение как миллисекунды (bigint)

...