Я столкнулся с проблемой синтаксического анализа даты, программа была сбита арабскими датами. По какой-то причине DateTime.TryParse()
выводит мусор для этой культуры. Вот пример кода, который иллюстрирует мою проблему:Анализ арабского языка на C#?
var culture = CultureInfo.CreateSpecificCulture("ar");
DateTime date;
if (DateTime.TryParse(
"15/01/16",
culture,
DateTimeStyles.None,
out date))
{
Console.WriteLine("TryParse with Arabic culture: " + date);
}
if (DateTime.TryParseExact(
"15/01/16",
culture.DateTimeFormat.ShortDatePattern, // dd/MM/yy
culture,
DateTimeStyles.None,
out date))
{
Console.WriteLine("TryParseExact with Arabic short date pattern and culture: " + date);
}
if (DateTime.TryParseExact(
"15/01/16",
culture.DateTimeFormat.ShortDatePattern, // dd/MM/yy
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out date))
{
Console.WriteLine("TryParseExact with Arabic short date pattern and invariant culture: " + date);
}
Выход заключается в следующем:
TryParse with Arabic culture: 1995-06-13 00:00:00
TryParseExact with Arabic short date pattern and culture: 1995-06-13 00:00:00
TryParseExact with Arabic short date pattern and invariant culture: 2016-01-15 00:00:00
Только последняя версия работает, и я не могу понять, почему первые две версии терпят неудачу. Я мог понять, что TryParse
терпел неудачу, потому что он не мог понять, какой шаблон использовать; но в TryParseExact
Я указываю точный формат, и он по-прежнему не может правильно разобрать. Я не могу понять, почему это происходит.
По умолчанию время культуры арабской культуры не используется по григорианскому календарю IMO. Какова ценность для 'culture.Calendar'? – Irshad
@Irshad: Возможно, вы захотите добавить это как ответ, с немного дополнительной информацией ... –
@JonSkeet Спасибо. Добавлено – Irshad