2016-09-28 42 views
0

解析當我嘗試這個字符串解析成日期:字符串的不正確的格式時DateTime.ParseExact

1.05.2016 

有了這個代碼:

var startDate = DateTime.ParseExact(Console.ReadLine(), 
       "dd.m.yyyy", CultureInfo.InvariantCulture); 

出現錯誤:

Unhandled Exception: System.FormatException: String was not recognized as a valid DateTime. 
    at System.DateTimeParse.ParseExact(String s, String format, DateTimeFormatInfo dtfi, DateTimeStyles style) 
    at System.DateTime.ParseExact(String s, String format, IFormatProvider provider) 
    at _09.Holidays_Between_Two_Dates.Program.Main(String[] args) in C:\Users\martin\documents\visual studio 2015\Projects\Methods. Debugging - Troubleshooting Code\09. Holidays Between Two Dates\09. Holidays Between Two Dates.cs:line 15 

有人可以幫忙嗎?提前致謝。

+0

嘗試'「d.MM.yyyy」'作爲格式 – Pikoh

+0

[?我如何以不同的格式格式化日期時間(http://stackoverflow.com/questions/35650681/how-do-i-format-a-datetime-in-a-different-format) – CodeCaster

回答

1

「M」代表幾個月,「m」代表分鐘。請確保你使用正確的:

var startDate = DateTime.ParseExact(Console.ReadLine(), 
      "dd.M.yyyy", CultureInfo.InvariantCulture); 
+0

看看https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx –

1

更正格式,因爲輸入的日期時間格式,並提供格式必須爲您輸入1.05.2016匹配

可以使用

var startDate = DateTime.ParseExact(Console.ReadLine(), 
       "d.MM.yyyy", CultureInfo.InvariantCulture); 

但日期將不總是個位數,因此最好使用雙位數01.05.2016

var startDate = DateTime.ParseExact(Console.ReadLine(), 
       "dd.MM.yyyy", CultureInfo.InvariantCulture); 
+0

他爲什麼要改變輸入? – Pikoh

+0

爲了安全起見,因爲不是所有的時間日期都是單個數字,但可以省略 – Mostafiz

+1

我不明白你說的是什麼。使用「d.MM.yyyy」作爲格式,例如將正確解析「11.05.2016」。它不限制日期爲1位數 – Pikoh

0

你能從到Console.ReadLine仔細檢查你的輸入()?也許它包含回車或其他非法字符?我在LinqPad上運行以下代碼:

DateTime.ParseExact("1.05.2016","d.MM.yyyy", System.Globalization.CultureInfo.InvariantCulture).Dump(); 

而且它返回「01/05/2016 00:00:00」。