我使用以下代码将字符串转换为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);
答案 0 :(得分:7)
主要问题是" ar" culture有一个不同的默认日历系统 - 它试图将其解析为Um Al Qura日历中的日期。如果您打印ci.DateTimeFormat.Calendar
,它将显示System.Globalization.UmAlQuraCalendar
,而您显示的值可能是在公历系统中。因此,即使可以解析该值,也不能代表您期望的价值。
您使用" ar"支持的默认格式存在次要问题。文化 - 这不是一个好主意,除非你知道价值肯定是作为特定文化的人类可读价值提供的。
鉴于该值是ISO-8601格式,看起来它实际上是机器可读而不是人类可读 - 所以我建议使用CultureInfo.InvariantCulture
进行解析(理想情况下)使用DateTime.ParseExact
而不是Convert.ToDateTime
)。然后,您可以决定是否要在其日历系统中显示用户的值。