为什么会
DateTime.TryParseExact("08/10/2013", "dd/MM/yyyy", null, DateTimeStyles.None, out dateValue)
返回假?
使用 CultureInfo.InvariantCulture
而不是null
.
它告诉编译器格式与文化无关。
DateTime.TryParseExact("08/10/2013",
"dd/MM/yyyy",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out dateValue);`
如果使用null
,则推断为CultureInfo.CurrentCulture
(msdn:“如果提供者为空,则使用当前文化对应的 CultureInfo 对象”)。此外,由于不清楚,问题在于 / 被提供的文化的日期分隔符替换。它具有特殊的意义。http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx#dateSeparator
这是一个运行示例
因为您传递null
了 IFormatProvider 参数。尝试通过 CultureInfo.InvariantCulture 代替
编辑
正如其他人提到的,实际原因是/
要解析的字符串本身是使用IFormatProvider
. 当您传递null
CultureInfo.CurrentCulture 的默认值时使用。
我的解决方案:
公共静态 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;
}