Как хранить и сравнивать время, чувствительное к часовому поясу - PullRequest
4 голосов
/ 01 апреля 2010

У меня есть структура данных, в которой время хранится в виде int (минут в день) для быстрого сравнения. Сущность также имеет ссылку внешнего ключа обратно на таблицу TimeZone, которая содержит имя идентификатора CLR .NET и его аббревиатуры стандартного времени / летнего времени.

Поскольку эта информация хранится как нечувствительная к часовому поясу, мне было интересно, как в LINQ to SQL я мог преобразовать ее в UTC DateTime для сравнения с другими временами, которые будут в UTC.

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

Я использую .NET 3.5 SP1 и SQL Server 2008.

Ответы [ 2 ]

2 голосов
/ 05 апреля 2010

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

2 голосов
/ 05 апреля 2010

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

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

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