3

我有一个 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

4 回答 4

5

根据DateTime.ParseExact 方法的文档,您将FormatException在以下情况下得到一个。

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

您根本没有小时部分,也没有任何协议导致例外。

如果你真的想坚持使用这种格式yyyyMMddtt,你必须自己解析 AM/PM 部分,并在此基础上修改DateTime. 然后,您可以使用 解析日期的剩余部分yyyyMMdd

于 2012-07-04T11:06:03.093 回答
1

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

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

于 2012-07-04T11:01:56.637 回答
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);
于 2012-07-04T11:05:59.693 回答
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);
于 2012-07-04T11:15:48.370 回答