DateTime.TryParseExact不会返回正确的响应

时间:2013-10-11 13:01:59

标签: c# datetime

为什么会

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

返回false?

3 个答案:

答案 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

这是一个正在运行的例子

enter image description here

答案 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;
}