繁体   English   中英

DateTime.ParseExact返回当前日期

[英]DateTime.ParseExact returns current date

我尝试了以下代码:

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) 这实际上是在阅读这个问题

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

根据MSDN

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

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

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

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

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

行为非常类似于某些合理的模式,如“MM / yyyy” - 期望月份,而不是完全匹配/字符 ,而不是年份。

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

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

来自MSDN

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM