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 2

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,