2016-09-28 26 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”。