C# DateTime синтаксический анализ международных культур
Я пытаюсь проанализировать различные форматы дат, число дней, время и компоненты года согласованы, но день недели и месяц зависят от устройства. Вот некоторые примеры результатов, полученные от iPad
Isn Mac 11 16:25:58 2013
Ahd Mac 10 18:34:41 2013
Sab Mac 09 18:44:34 2013
Jum Mac 08 16:57:33 2013
Fri Mar 8 16:49:46 2013
Thu Mar 7 12:34:47 2013
Sat Jan 19 12:21:58 2013
Английские разбирают отлично, но Малайзийские (малайские) никогда не делают
Я использовал это для отладки:
var allCultures = CultureInfo.GetCultures(CultureTypes.AllCultures);
foreach (var culture in allCultures)
{
if (DateTime.TryParseExact("Isn Mac 11 16:25:58 2013", "ddd MMM d HH:mm:ss yyyy", culture, DateTimeStyles.None, out result))
return;
}
В идеале он будет обрабатывать все возможные языки в этом формате, и мне не придется писать код для конкретного языка
Я пытался ручной разбор Малайзийских дат со следующими кодами культуры: мс МС-БН ms-MY
Есть идеи?
Спасибо, что уделили мне время
2 ответа:
Это может быть ошибка в данных
CultureInfo
для малазийских культур-массивAbbreviatedDayNames
выглядит следующим образом:Вы не увидите, чтоAhad Isnin Sel Rabu Khamis Jumaat Sabtu
Isn
не существует как таковой - этоIsnin
.Для сравнения, посмотрите на
DayNames
:Ahad Isnin Selasa Rabu Khamis Jumaat Sabtu
Я выбрал их из:
System.Globalization.CultureInfo.GetCultureInfo("ms-MY").DateTimeFormat
В качестве решения смотрите, можно ли использовать полные имена дней - использование
Isnin
вместоIsn
в вашем примере возвращает правильный объектDateTime
.
Я проверил вашу дату-время с малайзийской культурой. Очевидно, что ваша строка имеет неправильное название дня:
var dt = new DateTime(2013,03,11,16,25,58); var currCult = CultureInfo.CreateSpecificCulture("ms-MY"); var str = dt.ToString("ddd MMM d HH:mm:ss yyy", currCult); // ---> "Isnin Mac 11 16:25:58 2013"
Имхо
Isn
!=Isnin
,