yyyyMMddtt中的DateTime.ParseExact错误

时间:2012-07-04 10:59:11

标签: c# datetime

我有一个DateTime对象

DateTime dtt = new DateTime(2012, 6, 18, 12, 0, 0)

我正在将它转换为字符串

string str = dtt.ToString("yyyyMMddtt");

我将str称为“20120618PM”

到此为止

但是当我尝试使用DateTime.ParseExact()将其转换回DateTime时,我收到一个错误 String was not recognised a valid DateTime

dtt = DateTime.ParseExact(str, "yyyyMMddtt", null);

我甚至尝试过提供文化,但我仍然收到错误

dtt = DateTime.ParseExact(str, "yyyyMMddtt", CultureInfo.InvariantCulture);

我错过了什么错误?

4 个答案:

答案 0 :(得分:5)

根据DateTime.ParseExact method的文档,您将在以下情况中获得FormatException

  

s中的小时组件和AM / PM指示符不一致。

您根本没有小时组件,并且没有任何协议导致异常。

如果你真的想要坚持格式yyyyMMddtt,你必须自己解析AM / PM部分,并根据它修改DateTime的时间部分。然后,您可以使用yyyyMMdd解析日期的剩余部分。

答案 1 :(得分:1)

此字符串"20120618PM"不包含任何time

您确定它与您获得的字符串相同吗?

答案 2 :(得分:0)

更改格式yyyyMMdd hh:mm:ss希望其wrk

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);

答案 3 :(得分:0)

正如Martin和Asif建议的那样,你必须在字符串中包含小时以便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);