[英]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.