Если вы ищете лучший метод для обработки часовых поясов в (более или менее) корпоративном приложении, я могу поделиться проверенным:
Хранить всю информацию о дате и времени вУНИВЕРСАЛЬНОЕ ГЛОБАЛЬНОЕ ВРЕМЯ.Хранение его как локальное время (на сервере или где-либо еще) всегда несет в себе риск того, что кто-нибудь где-нибудь когда-нибудь забудет конвертировать их, и результаты будут не идеальными.Конечно, это означает, что даты и время должны создаваться с помощью DateTime.UtcNow или с правильным выбранным DateTimeKind (это относится и к синтаксическому анализу).
Очевидно, что вам нужно преобразовать часовой пояс перед отображениемDateTime для конечного пользователя.И вы наверняка понимаете, что вам нужно получить эту информацию из какого-то источника (отсюда и вопрос).Это может быть где-то на стороне клиента (что особенно хорошо работает с толстым клиентом и не очень хорошо с JavaScript тонкого клиента), но также может быть и профиль пользователя.Если ваше приложение имеет профили пользователей, я бы определенно рекомендовал разрешить пользователю выбирать предпочтительный часовой пояс.Другие настройки, связанные с g11n, предпочтительнее для электронной почты или предпочитаемого языка.Все эти настройки должны быть обнаружены и предварительно выбраны (чтобы пользователю не приходилось думать или, что еще важнее, нажимать слишком много).
Для преобразования DateTime
классов в местное время в другое времязона, вы бы использовали TimeZoneInfo класс.Есть несколько способов сделать это ...
Если вы реализуете этот метод, вы можете столкнуться с проблемой с именами часовых поясов - они в культуре сервера, поэтому вам нужно будетexternalize (переместить в файл ресурсов) то, что DisplayName
TimeZoneInfo показывает вам, и пусть переводчики выполняют свою работу.
Также просто короткое слово, которое я имел в виду, определяя часовой пояс.
На толстом клиенте вы бы это сделалипросто читая местный часовой пояс:
TimeZoneInfo currentTimeZone = TimeZoneInfo.Local;
С JavaScript (тонкий клиент) это не так просто.Единственное, что вы можете получить, это смещение часового пояса (которое может варьироваться в зависимости от даты и времени) на данную дату:
var date = new Date();
var offset = date.getTimezoneOffset(); // GMT offset in minutes