#.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 предполагает, что оно дает мне локализованное имя, но оно всегда показывает мне имя в текущей среде сервера :/