DateTime.ParseExact返回当前日期
我尝试下面的代码:DateTime.ParseExact返回当前日期
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。
我的问题是这个解析是如何工作的?
作为每MSDN:
如果格式定义没有时间元件和解析操作 成功的日期,所得到的日期时间值具有午夜 (00:00:00)的时间。如果格式定义了没有日期元素的时间并且解析操作成功,则生成的DateTime值的日期为 DateTime.Now.Date。
您的格式字符串与值相同 - 因此解析按原样进行,不会抛出异常。 如果您要更改格式字符串说,02/02/2013
- 您将得到FormatException
如预期
格式字符串中没有日/月占位符。因此,它实际上匹配每个字符(成功),并为日期的每个组件返回默认(今天)值。
事实上,如果没有它会抛出错误,如
DateTime.ParseExact("11/02/2013",
"01/02/2013", // string format
CultureInfo.InvariantCulture);
行为非常相似,一些合理的(“11/...”和“01/...”之间不匹配的通知)没有精确匹配像“MM/yyyy”这样的模式 - 期待月,比完全匹配/
字符,比年。
默认值是午夜当前日期DateTime.ParseExact的:
如果格式定义一个时间没有日期元件和解析操作成功,则得到的日期时间值具有DateTime.Now.Date的日期。
从MSDN:
public static DateTime ParseExact(string s, string format, IFormatProvider provider)
如果格式定义一个时间没有日期元件和解析操作成功,则得到的日期时间值具有DateTime.Now.Date的日期。
是不是默认日期值是:'{01/01/0001 12:00:00 AM}'您有任何参考它在哪里选择当前日期作为默认值? – user2711965 2014-09-24 15:45:42
@ user2711965同样,在文档中:'如果格式定义了一个没有日期元素的时间并且解析操作成功,则生成的DateTime值的日期为DateTime.Now.Date.' – tnw 2014-09-24 15:46:40