2014-09-24 189 views
4

我嘗試下面的代碼: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

我的問題是這個解析是如何工作的?

回答

6

作爲每MSDN

如果格式定義沒有時間元件和解析操作 成功的日期,所得到的日期時間值具有午夜 (00:00:00)的時間。如果格式定義了沒有日期元素的時間並且解析操作成功,則生成的DateTime值的日期爲 DateTime.Now.Date。

您的格式字符串與值相同 - 因此解析按原樣進行,不會拋出異常。 如果您要更改格式字符串說,02/02/2013 - 您將得到FormatException如預期

5

格式字符串中沒有日/月佔位符。因此,它實際上匹配每個字符(成功),併爲日期的每個組件返回默認(今天)值。

事實上,如果沒有它會拋出錯誤,如

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

行爲非常相似,一些合理的(「11/...」和「01/...」之間不匹配的通知)沒有精確匹配像「MM/yyyy」這樣的模式 - 期待月,比完全匹配/字符,比年。

默認值是午夜當前日期DateTime.ParseExact的:

如果格式定義一個時間沒有日期元件和解析操作成功,則得到的日期時間值具有DateTime.Now.Date的日期。

+1

是不是默認日期值是:'{01/01/0001 12:00:00 AM}'您有任何參考它在哪裏選擇當前日期作爲默認值? – user2711965 2014-09-24 15:45:42

+2

@ user2711965同樣,在文檔中:'如果格式定義了一個沒有日期元素的時間並且解析操作成功,則生成的DateTime值的日期爲DateTime.Now.Date.' – tnw 2014-09-24 15:46:40

1

MSDN

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

如果格式定義一個時間沒有日期元件和解析操作成功,則得到的日期時間值具有DateTime.Now.Date的日期。

相關問題