为了账号安全,请及时绑定邮箱和手机立即绑定

C# DateTime.TryParse 让我很困惑

C# DateTime.TryParse 让我很困惑

C#
呼啦一阵风 2021-10-23 16:33:51
我DateTime.TryParse在我的程序中使用方法来判断字符串值是否为DateTime,然后我注意到这一点:DateTime.TryParse("9.08", out DateTime dt)// trueDateTime.TryParse("2.52", out DateTime dt)// false为什么会发生这种情况?
查看完整描述

3 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

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,因为您可以将您的CultureInfoParseDateTime 字符串设置为参数并确保符合您的预期格式。

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


查看完整回答
反对 回复 2021-10-23
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

根据DateTime.TryParse文档:

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

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


查看完整回答
反对 回复 2021-10-23
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

除非您每次都试图了解 .NET 的字符串转换,否则,您应该无法回答“为什么会发生这种情况?”

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

Convert.ToDateTime(dateString)

因此,DateTime.TryParse = false意味着你不应该Convert.ToDateTime对那个字符串做。

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


查看完整回答
反对 回复 2021-10-23
  • 3 回答
  • 0 关注
  • 361 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信