DateTime.ParseExact返回当前日期

use*_*965 4 .net c# datetime

我尝试了以下代码:

DateTime dateTime = DateTime.ParseExact("01/02/2013",  //string date
                                        "01/02/2013",  // string format
                                         CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

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

我知道我的约会的有效格式应该是MM/dd/yyyy,但为什么它没有抛出异常.我也尝试过DateTime.TryParseExact,它返回当前日期而不是default(DateTime).这实际上是在阅读这个问题.

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

And*_*yev 6

根据MSDN:

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

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


Ale*_*kov 5

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

事实上,如果没有完全匹配,它将抛出错误(注意"11/..."和"01/..."之间不匹配)

   DateTime.ParseExact("11/02/2013",  
                  "01/02/2013",  // string format
                   CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

行为非常类似于一些合理的模式,如"MM/yyyy" - 期望月份,而不是完全匹配/角色,而不是年份.

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

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

  • @ user2711965再次,在文档中:`如果format定义了一个没有日期元素的时间并且解析操作成功,则生成的DateTime值的日期为DateTime.Now.Date. (2认同)