2

为什么会

 DateTime.TryParseExact("08/10/2013", "dd/MM/yyyy", null, DateTimeStyles.None, out dateValue)  

返回假?

4

3 回答 3

9

使用 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

这是一个运行示例

在此处输入图像描述

于 2013-10-11T13:05:38.087 回答
6

因为您传递null了 IFormatProvider 参数。尝试通过 CultureInfo.InvariantCulture 代替

编辑 正如其他人提到的,实际原因是/要解析的字符串本身是使用IFormatProvider. 当您传递nullCultureInfo.CurrentCulture 的默认值时使用。

于 2013-10-11T13:05:06.083 回答
0

我的解决方案:

公共静态 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;
}       
于 2014-09-25T13:44:46.350 回答