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