Я думал, что это будет очень простой вопрос, но я не могу его решить. В моем приложении я хочу отображать текущее время в зависимости от настройки региона пользователя. Если мой телефон обычно отображает 17:48, я хочу, чтобы мое приложение отображало его в этом формате. Если он показывает 17:48, то то же правило должно применяться к моему приложению. Тем не менее, что бы я ни делал, он показывает только версию am / pm. Я использую класс System. DateTime . Я видел несколько решений, в которых я могу сделать это (установка времени в австрийском формате времени):

string time = DateTime.Now.ToString("t", de-AT);

И это работает! Однако я не хочу устанавливать его вручную, а хочу использовать формат региона в зависимости от настроек телефона пользователя. Я попытался получить название языковой страны с помощью CultureInfo.CurrentCulture вот так:

string time = DateTime.Now.ToString("t", CultureInfo.CurrentCulture.Name);

Это не работает, потому что CultureInfo.CurrentCulture.Name всегда отображает en-US, даже если мой телефон настроен на австрийский регион. Когда я использую класс GeographicRegion и печатаю это:

GeographicRegion userRegion = new GeographicRegion();
string region = userRegion.CodeTwoLetter;

Я получу AT в виде строки и «Österreich» (= Австрия) при печати userRegion.NativeName;

Есть ли способ сделать это?

1
Southgarden116 23 Апр 2016 в 00:42

2 ответа

Лучший ответ

После многих часов поисков я нашел способ заставить его работать! Я использую класс DateTimeFormatter, который делает именно то, что я хочу. По крайней мере, насколько мне известно.

        GeographicRegion userRegion = new GeographicRegion();
        string regionCode = userRegion.CodeTwoLetter;

        DateTimeFormatter timeFormatter = new DateTimeFormatter("hour minute", new[] { regionCode });
        string correctTime = timeFormatter.Format(DateTime.Now);           
        DateTimeFormatter dateFormatter = new DateTimeFormatter("dayofweek month day", new[] { regionCode });
        string correctDate = dateFormatter.Format(DateTime.Now);

Если кто-то увидит в этом ошибку и она не будет работать во всех регионах, скажите, пожалуйста.

0
Southgarden116 23 Апр 2016 в 11:34

Ты можешь использовать

TimeZoneInfo timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.Local.Id);
DateTime dt = TimeZoneInfo.ConvertTime(DateTime.Now, timeZoneInfo);
0
SurenSaluka 11 Ноя 2020 в 09:49