簡體   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