字符串未被识别为阿拉伯语的有效日期时间

nsd*_*sds 1 c# datetime cultureinfo uwp

我正在使用下面的代码将字符串转换为datetime(使用选定的语言).它适用于除阿拉伯语之外的所有其他语言.当传递ar作为CultureInfo时,它会抛出错误"字符串未被识别为有效的DateTime".它的原因是什么?

CultureInfo ci = new CultureInfo("ar"); //works well for en,de,fr,hi,ru
string mDate = "2018-07-15 17:00";
DateTime userTime = Convert.ToDateTime(mDate,ci);
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

主要问题是"ar"文化有一个不同的默认日历系统 - 它试图将其解析为Um Al Qura日历中的日期.如果您打印ci.DateTimeFormat.Calendar它将显示System.Globalization.UmAlQuraCalendar,而您显示的值可能是在公历系统中.因此,即使可以解析该值,也不会代表您期望的值.

您使用"ar"文化支持的默认格式存在次要问题 - 除非您知道该值绝对是作为特定文化的人类可读值提供的,否则这不是一个好主意.

鉴于该值是ISO-8601格式,它看起来实际上是机器可读而不是人类可读 - 所以我建议使用解析CultureInfo.InvariantCulture(理想情况下使用DateTime.ParseExact而不是Convert.ToDateTime).然后,您可以决定是否要在其日历系统中向用户显示该值.