Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# yyyyMMddtt中的DateTime.ParseExact错误_C#_Datetime - Fatal编程技术网

C# yyyyMMddtt中的DateTime.ParseExact错误

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对象

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
的小时部分才能解析日期。