Почему культура En-I-IE не дает мне PM в формате?

StackOverflow https://stackoverflow.com/questions/4130860

  •  29-09-2019
  •  | 
  •  

Вопрос

У меня есть этот код, чтобы установить культуру

        public static CultureInfo GetRegionDefaultCulture(int regionId)
        {   
            // removed code to shorten....
            return CultureInfo.CreateSpecificCulture("en-au");

        }

Используя его здесь, в коде в моем испытательном примере

        Thread.CurrentThread.CurrentCulture = 
               CultureHelper.GetRegionDefaultCulture(regionId);

Использование этого в коде ASPX за моим тестовым примером

        DateTime dtNow = DateTime.Now;
        Response.Write("<br/>" + dtNow.ToString("dd MMM yyyy hh:mm tt"));

выходы

09 Nov 2010 04:42 PM

Если я обновлю код для использования любой из этих культур, я также правильно получаю AM/PM в выходе

en-PH
en-GB
en-US
en-JM

Если я обновлю код для использования

en-IE

выход

09 Nov 2010 04:44 

Я что-то упускаю? Почему по-разному ведет себя?

ОтвечатьПолучил ответ @Jordans.

Добавление этого бита кода сработало.

            DateTimeFormatInfo info = CultureInfo.CurrentCulture.DateTimeFormat;
            info.AMDesignator = "AM";
            info.PMDesignator = "PM"; 
Это было полезно?

Решение

Согласно документация, если культура не использует AM/PM, то ничего не будет возвращено tt.

Для культур, которые не используют назначение AM, это свойство возвращает пустую строку.

Я не могу найти никакой документации, в какой культуры есть назначение AM. Информация о культуре получается с помощью нативного метода, для которого я не могу найти источник. Вы можете создать свой собственный список со следующим кодом:

CultureInfo.GetCultures(CultureTypes.AllCultures)
  .Where(c => string.IsNullOrEmpty(c.DateTimeFormat.AMDesignator)));

Другие советы

По-видимому, настройки локализации для «En-I-IE» по умолчанию используют 24-часовые часы, поэтому нет необходимости в AM/PM.

Это поведение культуры. Он использует культурные настройки Windows, чтобы манипулировать своими деталями. Если вы устанавливаете информацию о локале по своему желанию, вам следует установить, что такое назначения AM/PM. Это то, что вы сделали, используя код @Jordans.

Но проблема здесь в языке. «Am» и «PM» приходят в любой локал. Но то, что нужно произойти, так это «Am», а «PM» должны измениться в соответствии с местом.

Например: если ваша информация о локале является результатом "ZH-TW", будет 下午 04:16:08.

Таким образом, использование 24 -часовых часов является одним решением. Но нет AM/PM, как мы знаем, например, 3,15 вечера = 15:15 Это одно из хороших решений, потому что это застряло.

Второе решение, которое является предложением, это это. Изменение локали/культурной настройки сервера. пожалуйста, обратитесь https://msdn.microsoft.com/en-us/library/bb688125.aspx

Надеюсь, мой комментарий поможет вам.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top