C#DateTime.TryParse让我感到困惑

cjj*_*ogo 3 c# datetime datetime-format

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

DateTime.TryParse("9.08", out DateTime dt)
// true
DateTime.TryParse("2.52", out DateTime dt)
// false
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

D-S*_*hih 9

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);
Run Code Online (Sandbox Code Playgroud)

  • 这取决于文化背景.第一个是我的德国机器上的'2018-08-09`. (5认同)