我在程序中使用DateTime.TryParse
方法来判断字符串值是否为DateTime
,然后我注意到了这一点:
DateTime.TryParse("9.08", out DateTime dt)
// true
DateTime.TryParse("2.52", out DateTime dt)
// false
为什么会这样?
答案 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,因为您可以将CultureInfo
和Parse
DateTime字符串设置为参数并确保符合您期望的格式。
DateTime.TryParseExact("09.08",
"MM.dd",
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None,
out dt);
答案 1 :(得分:1)
答案 2 :(得分:0)
除非您每次尝试都了解.NET的字符串转换, 否则,您将无法回答“为什么会那样?”
DateTime.TryParse只是一种简单的条件处理,可以防止您在执行操作时出错。
Convert.ToDateTime(dateString)
因此,DateTime.TryParse = false
意味着您不应该对该字符串执行Convert.ToDateTime
。
相反,如果字符串为DateTime.TryParse = true
,则意味着该字符串应与.NET日期字符串的期望匹配(这意味着.NET知道如何将该字符串转换为DateTime)。