2017-09-01 50 views
3

The documentation on yyy format表示它是3位數字或更多。那麼爲什麼下面的代碼會拋出異常?爲什麼DateTime.ParseExact以「dd.Mm.yyy」格式和4位數年份的日期引發異常?

string format = "dd.MM.yyy"; 
string s = DateTime.Now.ToString(format, CultureInfo.InvariantCulture); 
DateTime d = DateTime.ParseExact(s, format, CultureInfo.InvariantCulture); //this throws FormatException 

Fiddle

+2

在使用YYYY'的「YYY」自定義格式說明表示用最少的三位數字的年份。如果年份有三位以上有效數字,則它們包含在結果字符串中。如果年份少於三位數字,則用前導零填充數字以產生三位數字。 - 從您鏈接的文檔中獲得。輸出字符串一年有4個字符,而不是3個。因爲你說它只有3個字符,所以它最終拋出。 – derekmckinnon

+0

相當多的文檔似乎是用'ToString()'色彩的眼鏡編寫的。有幾個地方表明Parse系列的方法更爲嚴格。 –

+0

您應該會@derekmckinnon'如果一年有三個以上顯著數字,它們包含在結果string' ParseExact必須十分嚴謹 – user6144226

回答

1

這看起來像我的錯誤。我想這要排除任何語言環境問題,也得到了同樣的錯誤:

string format = "dd.MM.yyy"; 
string s = DateTime.Now.ToString(format, CultureInfo.InvariantCulture); 
DateTime d = DateTime.ParseExact(s, format, CultureInfo.InvariantCulture); //this throws FormatException 

編輯:看起來是這個問題的一個副本:Why can't DateTime.ParseExact parse DateTime output?

0

我試着調試代碼enter image description here

的字符串存儲所有4位數字,但您的格式要求年份爲3位數字。我想這就是爲什麼日期時間不能夠解析你的字符串

嘗試解析它會解決你的問題

相關問題