C#DateTime.TryParse使我感到困惑

时间:2018-07-23 06:12:53

标签: c# datetime datetime-format

我在程序中使用DateTime.TryParse方法来判断字符串值是否为DateTime,然后我注意到了这一点:

DateTime.TryParse("9.08", out DateTime dt)
// true
DateTime.TryParse("2.52", out DateTime dt)
// false

为什么会这样?

3 个答案:

答案 0 :(得分:9)

DateTime.TryParse是当前DateTimeFormatInfo对象中的解析信息,由当前线程区域性隐式提供。

  

由于DateTime.TryParse(String,DateTime)方法尝试使用当前区域性的格式规则来解析日期和时间的字符串表示形式,因此尝试在不同区域性中解析特定的字符串可能会失败或返回不同的结果。如果要在不同的语言环境中解析特定的日期和时间格式

在某些地区,DateTime分隔符是.而不是/

在我的计算机上。

DateTime.TryParse"9.08"解析为今年'09/08'2018/09/08是有效的datetime,因此它是true

DateTime.TryParse将解析"2.52"到今年'02/52',但是2月没有第52天,2018/02/52不是有效的DateTime,因此它将是false

我将使用DateTime.TryParseExact来解析DateTime,因为您可以将CultureInfoParse DateTime字符串设置为参数并确保符合您期望的格式。

DateTime.TryParseExact("09.08",
                       "MM.dd",
                        System.Globalization.CultureInfo.InvariantCulture,
                        System.Globalization.DateTimeStyles.None,
                        out dt);

答案 1 :(得分:1)

根据DateTime.TryParse文档:

  

返回一个值,该值指示转换是否成功。

由于无法将"2.52"解析为任何有效日期,因此它返回了false

答案 2 :(得分:0)

除非您每次尝试都了解.NET的字符串转换, 否则,您将无法回答“为什么会那样?”

DateTime.TryParse只是一种简单的条件处理,可以防止您在执行操作时出错。

Convert.ToDateTime(dateString)

因此,DateTime.TryParse = false意味着您不应该对该字符串执行Convert.ToDateTime

相反,如果字符串为DateTime.TryParse = true,则意味着该字符串应与.NET日期字符串的期望匹配(这意味着.NET知道如何将该字符串转换为DateTime)。