2016-10-03 5 views
0

У меня есть .NET C#, и вам нужно получить локальное время каждого поля datetime, которое будет отображаться для конечного пользователя в качестве локального времени пользователя. Есть ли способ справиться с этим глобально без необходимости изменять каждое место, на котором отображается дата-время?C# глобально локализовать дату времени в приложении

Системные времена установлены на UTC, и все данные сохраняются и возвращаются как UTC.

пример может быть, если время в системе, которая возвращается к приложению является 1600hrs UTC, пользователь сидит в восточной части времени должен увидеть этот раз 1200hrs, и пользователь сидит в

Я видел некоторые решения, которые используют JS, но это не вариант для нас

спасибо за помощь

+0

Очень неясно, что вы спрашиваете ... Для меня «системные времена установлены на UTC» означает, что UTC * является местным временем * - какое другое местное время вы ищете? Кроме того, «IIS» представляет собой несколько странный тег - возможно, вы имеете в виду «это код веб-сервера в пользовательской структуре nonASP.Net» - вы можете захотеть [изменить] сообщение и уточнить это. –

ответ

1

вы должны следить за то локальный, в куки или базу данных, необходимо хранить два значения помогите вам в i18n (интернационализация), тогда, когда вам нужно отформатировать что-то, используйте два класса C#: TimeZoneInfo и CultureInfo, сначала нужен часовой пояс в стране, а второй нужен часовой пояс (вы можете видеть все часовые пояса с TimeZoneInfo.GetSystemTimeZones(), тогда вы используете эти классы для форматирования ваших текстов.

Пример:

var timeZoneInfo = string.IsNullOrEmpty(Settings.CountryTimezone) ? 
     TimeZoneInfo.Local : 
     TimeZoneInfo.FindSystemTimeZoneById(Settings.CountryTimezone); 
var cultureInfo = string.IsNullOrEmpty(Settings.CountryCulture) ? 
     CultureInfo.CurrentCulture : 
     CultureInfo.GetCultureInfo(Settings.CountryCulture); 

Затем вы используете это такие объекты, как это:

var dateTime = TimeZoneInfo.ConvertTimeFromUtc(client.ActivatedOn.Value.UtcDateTime, timeZoneInfo); 

И в представлении (к примеру):

@dateTime.ToString("G", cultureInfo) 

С этим вы будете показывая пользователю не только правильную дату (несмотря на летнее время в стране), но и в локальном формате.