Как найти формат даты по умолчанию для Культуры
Ну, я пытаюсь получить формат даты по умолчанию для культуры.
Например, en-us имеет "m/dd/yyyy", en-uk "d / mm / yyyy". Культура может быть чем угодно на клиентской машине. и Dateformat также может быть чем угодно. Например, "Культура" - это en-us, но формат даты - "dd-MMM-yyyy".
В этом случае я хочу получить ShortDateformatString как m / dd / yyyy, а не dd-MMM-yyyy.
Я попытался сделать это для всей культуры, используя:
string _cultureInfo = CultureInfo.CurrentCulture.IetfLanguageTag;
CultureInfo shortDatefomatString = new CultureInfo(_cultureInfo);
string old = shortDatefomatString.DateTimeFormat.ShortDatePattern;
но он всегда возвращает MT dd-MMM-yyyy
, Мне нужен по умолчанию один, а не набор на машине.
3 ответа
Я считаю, что проблема заключается в том, как вы получаете желаемую культуру.
Это должно дать вам настройки культуры по умолчанию:
var cultureLanguageTag = CultureInfo.CurrentCulture.IetfLanguageTag;
var defaultCulture = CultureInfo.GetCultureInfoByIetfLanguageTag( cultureLanguageTag );
Предполагается, что создание одного со строкой будет использоваться с именем культуры, я не знаю, должно ли оно работать с тегом IETF, возможно, оно только что возвращало текущую культуру в этом случае.
Следующее, кажется, работает для меня.
Console.WriteLine(CultureInfo.GetCultureInfo("en-us").DateTimeFormat.ShortDatePattern);
Console.WriteLine(CultureInfo.GetCultureInfo("en-gb").DateTimeFormat.ShortDatePattern);
Выход: М / д / гггг дд / мм / гггг
Согласно MSDN, CurrentCulture
вернет культуру одним из следующих способов:
- Возвращается
CultureInfo.DefaultThreadCurrentCulture
если это не нуль. (Обратите внимание, что если вы не укажете конкретную культуру, она всегда будет нулевой.) - Возвращает результат вызова Windows
GetUserDefaultLocaleName
функция. Это вернет любую культуру, которую вы установили в панели управления.
Может случиться так, что если вы измените язык в Панели управления, вы не увидите изменения, пока не перезагрузите компьютер.
Чтобы проверить, показывают ли культуры правильные даты, вы можете вручную выбрать культуру вместо использования системной культуры с помощью CultureInfo.CreateSpecificCulture("en-US");
(замена "en-US" на культурные коды других стран).