为什么会
DateTime.TryParseExact("08/10/2013", "dd/MM/yyyy", null, DateTimeStyles.None, out dateValue)
返回false?
答案 0 :(得分:9)
使用CultureInfo.InvariantCulture
代替null
。
它告诉编译器该格式与文化无关。
DateTime.TryParseExact("08/10/2013",
"dd/MM/yyyy",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out dateValue);`
如果您使用null
,则推断为CultureInfo.CurrentCulture
(msdn:“如果provider为null,则使用与当前区域性对应的CultureInfo对象”) 。此外,由于它不是那么清楚,问题是/被所提供的文化的日期分隔符取代。它有特殊的意义。 http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx#dateSeparator
这是一个正在运行的例子
答案 1 :(得分:6)
因为您为IFormatProvider参数传递了null
。尝试传递CultureInfo.InvariantCulture
修改强>
正如其他人所提到的,实际原因是要解析的字符串中的/
本身是使用IFormatProvider
提供的规则进行翻译的。传递null
时,将使用CultureInfo.CurrentCulture的默认值。
答案 2 :(得分:0)
我的解决方案:
public static bool IsValidDateTime(string sDateTime){ bool ret = false;
string[] formats = {
"dd/MM/yyyy HH:mm:ss",
"yyyy-MM-dd HH:mm:ss",
"yyyy-MM-ddTHH:mm:sszzz"
};
try{
DateTime.ParseExact(sDateTime, formats, CultureInfo.InvariantCulture, DateTimeStyles.None);
ret = true;
}
catch{}
return ret;
}