Почему культура En-I-IE не дает мне PM в формате?
-
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
Надеюсь, мой комментарий поможет вам.