Как найти формат даты по умолчанию для Культуры

Ну, я пытаюсь получить формат даты по умолчанию для культуры.

Например, 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 вернет культуру одним из следующих способов:

  1. Возвращается CultureInfo.DefaultThreadCurrentCulture если это не нуль. (Обратите внимание, что если вы не укажете конкретную культуру, она всегда будет нулевой.)
  2. Возвращает результат вызова Windows GetUserDefaultLocaleName функция. Это вернет любую культуру, которую вы установили в панели управления.

Может случиться так, что если вы измените язык в Панели управления, вы не увидите изменения, пока не перезагрузите компьютер.

Чтобы проверить, показывают ли культуры правильные даты, вы можете вручную выбрать культуру вместо использования системной культуры с помощью CultureInfo.CreateSpecificCulture("en-US"); (замена "en-US" на культурные коды других стран).

Другие вопросы по тегам