C#DateTime.ParseExact

C#DateTime.ParseExact,c#,parsing,datetime,C#,Parsing,Datetime,我有一个以制表符分隔的文件,它正在被解析,然后被插入到数据库中。当我遇到date列时,我在解析它时遇到了困难 我的密码是: var insert = DateTime.ParseExact(line[i], "d/M/yyyy h:mm", CultureInfo.InvariantCulture); 行[i]中的字符串格式为:7/7/2011 10:48,10/20/2011 6:27 我得到的例外是 日历中不支持由字符串表示的日期时间 System.Globalization.Gregor

我有一个以制表符分隔的文件,它正在被解析,然后被插入到数据库中。当我遇到date列时,我在解析它时遇到了困难

我的密码是:

var insert = DateTime.ParseExact(line[i], "d/M/yyyy h:mm", CultureInfo.InvariantCulture);
行[i]
中的字符串格式为:
7/7/2011 10:48
10/20/2011 6:27

我得到的例外是

日历中不支持由字符串表示的日期时间 System.Globalization.Gregorianalendar


您的格式字符串错误。换成

insert = DateTime.ParseExact(line[i], "M/d/yyyy hh:mm", CultureInfo.InvariantCulture);

这可能与此相关SO线程中介绍的文化问题相同:


您已经指定了区域性,因此请尝试跳过斜杠。

这是因为您在
行[i]
中有美式格式的日期,在
格式字符串中有英式格式的日期

11/20/2011
M / d/yyyy
我猜您可能需要将FormatString更改为:

"M/d/yyyy h:mm"
试试这个

var  insert = DateTime.ParseExact(line[i], "M/d/yyyy h:mm", CultureInfo.InvariantCulture);

这对我有效,不更改提供的日期字符串。对我有效,可能行列表中的字符串格式不正确。你是说
M/d/yyyy
还是
d/M/yyyy
他没有任何前导零example@Sign你说得对!我改变了答案。谢谢你提到。哇,我真不敢相信我错过了。结果显示日期是在M/d/yyyy而不是d/M/yyyy。我没有注意到,因为前几个日期是在月初。@Jonathan:我只发现了,因为你的问题的第一个版本中有一个类似“2011年10月20日”的日期。后来您将其更改为“7/7/2011 10:48”。-)哦,哈哈,我改变了它,以显示格式没有前导零。我甚至没有注意到我第一次使用的日期。