DateTime.ParseExact返回当前日期

时间:2014-09-24 15:36:25

标签: c# .net datetime

我尝试了以下代码:

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)。这实际上是在阅读this question

我的问题是这个解析是如何工作的?

3 个答案:

答案 0 :(得分:6)

根据MSDN

  

如果format定义了没有time元素的日期和解析操作   成功后,生成的DateTime值的时间为午夜   (00:00:00)。如果format定义了一个没有日期元素的时间和   解析操作成功,生成的DateTime值的日期为   DateTime.Now.Date。

您的格式字符串与值相同 - 因此解析按“原样”进行,并且不会抛出任何异常。 如果您要将格式字符串更改为02/02/2013 - 您将按预期获得FormatException

答案 1 :(得分:5)

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

确实如果没有完全匹配,它会抛出错误(注意" 11 /..."" 01 /..."}之间不匹配。

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

行为与一些合理的模式非常相似,例如" MM / yyyy" - 预期月份,/字符完全匹配,而不是年份。

默认值当前日期的午夜 DateTime.ParseExact

  

如果format定义了没有日期元素的时间并且解析操作成功,则生成的DateTime值的日期为DateTime.Now.Date。

答案 2 :(得分:1)

来自MSDN

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

如果format定义了没有日期元素的时间并且解析操作成功,则生成的DateTime值的日期为DateTime.Now.Date。