Как отобразить сокращения часового пояса клиента и часового пояса?

#.net #asp.net #internationalization #timezone #culture

#.net #asp.net #интернационализация #Часовой пояс #Культура

Вопрос:

Я создаю asp.net веб-сайт 2.0. Он отображает всех зарегистрированных кандидатов с зарегистрированной датой. Я сохраняю всю дату в базе данных как UniversalDate, теперь хочу отобразить дату на основе культуры клиента и часового пояса.

Я могу получить смещение часового пояса с помощью javascript, но как правильно отобразить сокращение часового пояса, потому что есть некоторые значения, которые одинаковы.

Поэтому, пожалуйста, дайте мне знать, как я могу это сделать?

Ответ №1:

Я не уверен, правильно ли я это понимаю:

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

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

Как этого избежать? Единственный способ — добавить информацию о часовом поясе в профиль пользователя и предоставить пользователю возможность выбирать свой часовой пояс из списка. Вы можете легко получить список из 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 предполагает, что оно дает мне локализованное имя, но оно всегда показывает мне имя в текущей среде сервера :/