首页 > 解决方案 > C# DateTime.TryParse 让我很困惑

问题描述

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

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

为什么会这样?

标签: c#datetimedatetime-format

解决方案


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

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

在某些文化中,DateTime分隔符是.而不是 /.

在我的电脑上。

DateTime.TryParse"9.08" 今年将 Parse是有效的'09/08', 所以它是.2018/09/08datetimetrue

DateTime.TryParse"2.52"今年会 Parse '02/52',但 2 月没有第 52 天,2018/02/52不是有效的DateTime,所以它会是false

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

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

推荐阅读