C# yyyyMMddtt中的DateTime.ParseExact错误
我有一个DateTime对象C# yyyyMMddtt中的DateTime.ParseExact错误,c#,datetime,C#,Datetime,我有一个DateTime对象 DateTime dtt = new DateTime(2012, 6, 18, 12, 0, 0) 我用这种方式把它转换成字符串 string str = dtt.ToString("yyyyMMddtt"); 我得到的str为“20120618PM” 直到这里都很好 但是当我试图使用DateTime.ParseExact()将其转换回DateTime时,我得到了一个错误 字符串未被识别为有效的日期时间 dtt = DateTime.ParseExact(st
DateTime dtt = new DateTime(2012, 6, 18, 12, 0, 0)
我用这种方式把它转换成字符串
string str = dtt.ToString("yyyyMMddtt");
我得到的str
为“20120618PM”
直到这里都很好
但是当我试图使用DateTime.ParseExact()将其转换回DateTime时,我得到了一个错误
字符串未被识别为有效的日期时间
dtt = DateTime.ParseExact(str, "yyyyMMddtt", null);
我甚至试着提供文化,但我还是犯了一个错误
dtt = DateTime.ParseExact(str, "yyyyMMddtt", CultureInfo.InvariantCulture);
我遗漏了什么错误?此字符串“20120618PM”
不包含任何时间
您确定它与您得到的字符串相同吗?请更改格式yyyyMMdd hh:mm:ss,希望是正确的
DateTime dtt = new DateTime(2012, 6, 18, 12, 0, 0);
string str = dtt.ToString("yyyyMMdd hh:mm:ss");
dtt = DateTime.ParseExact(str, "yyyyMMdd hh:mm:ss", null);
根据的文档,在以下情况下,您将得到一个FormatException
小时组成和s中的AM/PM指示器不一致
您根本没有小时组件,也不能有任何协议导致异常
如果您真的想坚持使用格式yyyyMMddtt
,您必须自己对AM/PM部分进行解析,并在此基础上修改DateTime
的时间部分。然后,您可以使用yyyyymmdd
解析日期的剩余部分。正如Martin和Asif所建议的,您必须在字符串中包含hour,以便ParseExact确定AM/PM
DateTime dtt = new DateTime(2012, 6, 18, 12, 0, 0);
string str = dtt.ToString("yyyyMMddhhtt");
dtt = DateTime.ParseExact(str, "yyyyMMddhhtt", CultureInfo.InvariantCulture);
奇怪地类似于这个问题@Jodrell:我回答了这个问题。但我对我的答案感到困惑。我必须承认,我也是。我不认为转换往返,您正在丢失有关ToString
的信息。像我对另一个问题的回答一样,这样的回答也行。@Jodrell:+1回答你的问题。解决方法是什么?如果你想使用AM/PM指示符,你还必须至少包含DateTime.ParseExact
的小时部分才能解析日期。