DateTime.ParseExact返回当前日期

4
我尝试了以下代码:
DateTime dateTime = DateTime.ParseExact("01/02/2013",  //string date
                                        "01/02/2013",  // string format
                                         CultureInfo.InvariantCulture);

我知道格式不正确。但是为什么它返回当前日期 dateTime = {24/09/2014 12:00:00 AM} 而没有抛出异常呢?

我知道我的日期应该使用有效的格式 MM/dd/yyyy,但是为什么它没有抛出异常呢。我还试过使用 DateTime.TryParseExact,它返回了当前日期而不是default(DateTime)。这实际上源于我读这个问题

我的问题是这种解析机制是如何工作的?

3个回答

7
根据MSDN所述:
如果格式没有时间元素并且解析操作成功,则结果DateTime值具有午夜(00:00:00)的时间。如果格式没有日期元素并且解析操作成功,则结果DateTime值具有DateTime.Now.Date的日期。
您的格式字符串与值相同 - 因此解析采用“原样”进行,不会抛出异常。如果您将格式字符串更改为例如02/02/2013,则将按预期抛出FormatException异常。

5

格式字符串中没有日/月占位符。因此,它会字面上匹配每个字符(成功),并为日期的每个组件返回默认(今天)值。

如果没有完全匹配,它将抛出错误,例如(注意“11/…”和“01/…”之间的不匹配)

   DateTime.ParseExact("11/02/2013",  
                  "01/02/2013",  // string format
                   CultureInfo.InvariantCulture);

行为与一些合理的模式非常相似,比如“MM/yyyy”——期望月份,而不是精确匹配斜杠字符,然后是年份。

默认值是当前日期的午夜时刻DateTime.ParseExact:

如果格式没有日期元素并且解析操作成功,则生成的 DateTime 值具有 DateTime.Now.Date 的日期。


1
默认的日期值不是:{01/01/0001 12:00:00 AM},你有参考资料说明它从哪里获取当前日期作为默认值吗? - user2711965
2
再次提到文档:如果格式定义了一个没有日期元素的时间,并且解析操作成功,那么结果为DateTime值将具有DateTime.Now.Date的日期。 - tnw

1
来自MSDN

public static DateTime ParseExact(string s, string format, IFormatProvider provider)

如果格式定义了一个没有日期元素的时间,并且解析操作成功,那么得到的 DateTime 值将具有 DateTime.Now.Date 的日期。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接