猿问

C# DateTime.TryParse 让我很困惑

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


DateTime.TryParse("9.08", out DateTime dt)

// true

DateTime.TryParse("2.52", out DateTime dt)

// false

为什么会发生这种情况?


呼啦一阵风
浏览 362回答 3
3回答

喵喵时光机

DateTime.TryParse 是当前DateTimeFormatInfo对象中的解析信息,由当前线程文化隐式提供。由于 DateTime.TryParse(String, DateTime) 方法尝试使用当前区域性的格式规则解析日期和时间的字符串表示形式,因此尝试跨不同区域性解析特定字符串可能会失败或返回不同的结果。如果特定的日期和时间格式将在不同的语言环境中解析在某些文化中,DateTime分隔符是.而不是 /。在我的电脑上。DateTime.TryParse将 Parse"9.08" 是今年'09/08', 2018/09/08是有效的datetime,所以它是true.DateTime.TryParseParse"2.52"会在今年'02/52',但 2 月没有第 52 天,2018/02/52不是有效的DateTime,所以它会是false。我会使用DateTime.TryParseExact 来解析 DateTime,因为您可以将您的CultureInfo和ParseDateTime 字符串设置为参数并确保符合您的预期格式。DateTime.TryParseExact("09.08",                        "MM.dd",                         System.Globalization.CultureInfo.InvariantCulture,                         System.Globalization.DateTimeStyles.None,                         out dt);

慕桂英546537

根据DateTime.TryParse文档:返回一个指示转换是否成功的值。由于无法解析"2.52"为任何有效日期,因此返回false.

Cats萌萌

除非您每次都试图了解 .NET 的字符串转换,否则,您应该无法回答“为什么会发生这种情况?”DateTime.TryParse 只是一个简单的条件处理,以防止您在执行时出错Convert.ToDateTime(dateString)因此,DateTime.TryParse = false意味着你不应该Convert.ToDateTime对那个字符串做。相反,如果字符串为DateTime.TryParse = true,则表示该字符串应符合 .NET 日期字符串的期望(这意味着 .NET 知道如何将该字符串转换为 DateTime)。
随时随地看视频慕课网APP
我要回答