Почему культура en-IE не дает мне AM PM в формате строки? - PullRequest
2 голосов
/ 09 ноября 2010

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

        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 

Я что-то упустил?Почему en-IE ведет себя по-другому?

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

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

            DateTimeFormatInfo info = CultureInfo.CurrentCulture.DateTimeFormat;
            info.AMDesignator = "AM";
            info.PMDesignator = "PM"; 

Ответы [ 3 ]

4 голосов
/ 09 ноября 2010

Очевидно, что в настройках локали для "en-IE" по умолчанию используются 24-часовые часы, поэтому нет необходимости в AM / PM.

2 голосов
/ 09 ноября 2010

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

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

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

CultureInfo.GetCultures(CultureTypes.AllCultures)
  .Where(c => string.IsNullOrEmpty(c.DateTimeFormat.AMDesignator)));
0 голосов
/ 11 августа 2016

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

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

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

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

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

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

...