Я не уверен, правильно ли я понимаю:
Ваша проблема в том, что вы получаете смещение часового пояса из веб-браузера с помощью функции JavaScript getTimeZoneOffset (), отправляете это на сервер и после отображения вы сталкиваетесьпроблема: какой часовой пояс использовать?
По сути, нет необходимости добавлять указатель часового пояса, если он используется по умолчанию.По умолчанию я имею в виду Local.В этом случае вам нужно заботиться только о правильном смещении.Конечно, это может быть проблемой для исторических данных: если существует более одного часового пояса, в котором (в настоящее время) используется одно и то же смещение, но смещение изменяется на разные даты, вы можете напечатать неправильные дату и время для нескольких записей.
Как этого избежать?Единственный способ - добавить информацию о часовом поясе в профиль пользователя и дать ему возможность выбрать свой часовой пояс из списка.Вы можете легко получить список из TimeZoneInfo
(и этот класс вам понадобится для выполнения вычислений; некоторые записи будут продублированы намеренно / по историческим причинам):
// gives you the list of time zones
var timeZones = TimeZoneInfo.GetSystemTimeZones();
foreach(var timeZone in timeZones)
{
// gives you the UTC offset and list of cities this entry regards to
// this is the best what you can display to user
string name = timeZone.DisplayName;
// ...
}
Если вы хотитеИспользуя этот метод, вы можете добавить информацию, которая гласит: «Все даты и время соответствуют ... часовому поясу. Измените свой часовой пояс здесь».Вот и все.
Единственная проблема, которую я имею, свойство DisplayName - предположить, что оно дает мне локализованное имя, но оно всегда показывает мне имя в текущей культуре сервера: /