[英]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個字符!
選項:
您聲稱將字符串截斷“將在其他地方失敗”-您能提供更多詳細信息嗎? 如果您指定“ 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.