Использование часовых поясов на веб-сайте с использованием ASP.Net 3.5 / SQL Server 2005 - PullRequest
1 голос
/ 13 марта 2009

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

Это как это сделать?

  1. Все значения DateTime сохраняются как UTC-время в базе данных
  2. У каждого пользователя есть значение UTC-Offset, сохраненное в его профиле
  3. При отображении значения даты и времени я беру значение из базы данных и применяю смещение пользователей.

Это путь? Или я что-то упустил?

Ответы [ 2 ]

7 голосов
/ 13 марта 2009

Не сохраняйте смещение UTC для пользователя - этого недостаточно, чтобы знать полную информацию о часовом поясе. Вам следует хранить их идентификатор часового пояса Олсона , например, "Europe / London". Затем вы можете отображать любое время UTC по местному времени с учетом исторических изменений, летнего времени и т. Д.

РЕДАКТИРОВАТЬ: похоже, TimeZoneInfo идентификатор на самом деле не в обычном формате Олсона - но если есть что-то разумное, что вы можете отобразить для пользователя (по выбору), и идентификатор, который вы можете получить зону позже, это, вероятно, нормально ... у вас могут возникнуть трудности, если позже вам потребуется взаимодействие с другими системами.

Вы должны спросить пользователя о его часовом поясе (возможно, пытаясь сначала угадать его с помощью JavaScript) - у него будет больше информации, чем у вас.

Вы должны исследовать класс TimeZoneInfo , чтобы узнать больше об этом - я не могу сказать, что сам много использовал, но это путь к .NET 3.5. В частности, FindSystemTimeZoneById и GetSystemTimeZones будут важны.

В общем, часовые пояса - это боль, но, по крайней мере, TimeZoneInfo дает гораздо больше поддержки, чем старый тип TimeZone.

0 голосов
/ 13 марта 2009

Это звучит как самый прямой путь для меня. Единственные проскальзывания, которые я видел, это то, что некоторые районы (например, части штата Индиана и, как мне кажется, вся Аризона) не взаимодействуют с переходом на летнее время, поэтому вам придется принять дополнительные меры предосторожности, отображая для них правильное время. 1001 *

...