8

我收到来自对 TimeSpan.ParseExact 的调用的 FormatError 异常,但我正在阅读的MSDN 文档说这种格式应该是正确的:

TimeSpan timeSpan = TimeSpan.ParseExact("172100", "HHmmss", CultureInfo.InvariantCulture);

有人可以告诉我为什么这不起作用吗?我对 DateTime.ParseExact 的调用几乎完全相同,并且效果很好:

DateTime datetTime = DateTime.ParseExact("090820", "yyMMdd", CultureInfo.InvariantCulture);
4

5 回答 5

15

TimeSpan 不使用与 DateTime 相同的格式规则。

你想要 hhmmss,而不是 HHmmss。

您正在查看 MSDN 中的错误页面 - 您想要类似以下内容:

http://msdn.microsoft.com/en-us/library/se73z7b9.aspx

于 2011-04-06T15:48:31.037 回答
5

参考这个更准确的文档:http: //msdn.microsoft.com/en-us/library/ee372287.aspx

您需要使用hh几个小时,而不是HH.

于 2011-04-06T15:51:02.890 回答
3

根据自定义时间跨度格式字符串,小时由“h”而不是“H”表示。

所以这很好用:

TimeSpan timeSpan = TimeSpan.ParseExact("172100", "hhmmss", 
                                        CultureInfo.InvariantCulture);

您链接到的文档用于自定义日期和时间格式字符串,它们不一样。他们是为了DateTime.ParseExact等;我链接到的文档用于TimeSpan.ParseExact等。

于 2011-04-06T15:50:21.603 回答
2

您正在尝试使用DateTime格式字符串来解析TimeSpan. TimeSpan有自己的(略有不同)格式字符串。有关完整列表,请参阅 MSDN:自定义 TimeSpan 格式字符串

特别是更改HHhh. 这会给你:

TimeSpan timeSpan = TimeSpan.ParseExact("172100",
                                        "hhmmss", // Note this parameter
                                        CultureInfo.InvariantCulture);
于 2011-04-06T15:49:26.270 回答
2

将字符串解析为 DateTime 值,然后减去它的 Date 值以获得 TimeSpan 形式的时间:

DateTime t = DateTime.ParseExact("172100", "HHmmss", CultureInfo.InvariantCulture);
TimeSpan time = t - t.Date;
于 2011-04-06T15:51:02.217 回答