簡體   English   中英

DateTime.ParseExact失敗取決於解析的字符串的長度

[英]DateTime.ParseExact fails depending on the parsed string's length

這很奇怪。 我有以下代碼:

Assert.AreEqual(new DateTime(2000, 1, 1), DateTime.ParseExact("2000", "yyyy", CultureInfo.InvariantCulture));
Assert.AreEqual(new DateTime(2000, 1, 1), DateTime.ParseExact("20000705", "yyyy", CultureInfo.InvariantCulture));

第一行通過,第二行失敗,顯示“ System.FormatException: String was not recognized as a valid DateTime ”。

我無法縮短要解析的字符串以匹配格式的長度-在這種情況下可以使用,但這是更通用的方法的一部分,在其他地方會失敗。 關於第二個呼叫為何失敗的任何想法?

[編輯]好的,我希望它可以解析滿足格式所需的輸入字符串。

我得到了許多格式很多的字符串,並且我有一個方法可以接受兩種格式,並且經過一些處理(我只得到日期,所以我將“ m”替換為“ M”,將“ Y”替換為“ y” (依此類推),我稱為DateTime.ParseExact 我之所以不能調用DateTime.Parse是因為它不允許使用格式參數。我可以在程序的一個部分中獲取ddMMyyyy,而在另一部分中獲取yyyyddMM,因此無法正確地找到它。

[編輯2]我猜這是我的錯...出現此問題時,我必須截斷輸入。 幸運的是,我通常以格式顯示日期的所有部分,這種情況(僅是年份)很少見。 謝謝您的幫助。

失敗絕對是正確的-您已經告訴它要精確到4個字符,然后再給它8個字符!

選項:

  • 為呼叫提供更多格式字符串(例如“ yyyyMMdd”)(您可以指定多種有效格式)
  • 僅傳遞您希望與格式匹配的字符串部分
  • 自己解析字符串

您聲稱將字符串截斷“將在其他地方失敗”-您能提供更多詳細信息嗎? 如果您指定“ yyyy”,那么大概您知道需要4個字符...您確切知道它們在字符串中的位置嗎? 如果是這樣,為什么您不能執行截斷?

之所以失敗,是因為DateTime.ParseExact要求輸入字符串與指定的格式完全匹配(錯誤,我的意思是, 幾乎完全按照下面的注釋),並且“ 20000705”與“ yyyy”不匹配。

要解析“ 20000705”,您將需要使用另一種技術-具有適當格式字符串的ParseExact (例如“ yyyyMMdd”)或DateTime.Parse ,這會更加寬容(盡管准確性也較低)。

似乎您正在嘗試從日期字符串中提取年份-沒有任何解析方法可以為您完成這一工作。

相反,您應該獲取由字符串表示的實際DateTime 2000年7月5日或2000年5月7日,具體取決於您的格式-然后使用DateTime.Year提取年份。

DateTime可以表示的最高日期是9999年12月31日。您要讓它理解大於9999的年份。您要么需要指定一種與您提供的值相匹配的格式,以便它可以理解僅第一個4位數字是年份。 例如,“ yyyymmdd”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM