27

我正在尝试从字符串中检索时间跨度,但 TryParseExact 返回错误(失败)。

我看不出我做错了什么,你能帮忙吗?我已经在代码中尝试了我的行的 2 个版本,但都不起作用。

TimeSpan.TryParseExact("04:00:01","HH:mm:ss",CultureInfo.CurrentCulture, out aTime)

TimeSpan.TryParseExact("04:00:01","HH:mm:ss", null, out aTime)

编辑:这里的两个回答都是正确的,我的自定义时间跨度格式有错误 - 我犯的错误是假设 DateTime 的自定义格式适用于 TimeSpan,但它们不适用。

4

4 回答 4

47

问题只是在您指定的 TimeSpan 的格式字符串中"HH:mm:ss"。说明符HH(大写)对时间跨度无效。你应该使用hh. 格式字符串确实区分大小写。

冒号 ( :) 也需要转义,所以使用"hh\\:mm\\:ss",@"hh\:mm\:ss""hh':'mm':'ss". 所有三种形式都将具有相同的效果。

您可以在此处查看 TimeSpan 的有效自定义格式字符串列表。TimeSpan 的标准格式字符串在这里

虽然HH对于 DateTime 和 DateTimeOffset 有效,其中它表示 24 小时制,小写 hh 表示 12 小时制,对于 TimeSpan - 小时部分始终基于 24 小时。您会认为HH格式将是选择的格式,以保持一致性,但不,它是hh.

于 2012-10-24T04:11:33.980 回答
5

可能应该提到您需要转义冒号字符。

TryParseExact("04:00:01", "HH\\:mm\\:ss" ...
于 2015-12-12T01:38:59.907 回答
3

您传递的字符串格式是错误的。

var res=TimeSpan.TryParseExact("04:00:01", "g", CultureInfo.CurrentCulture, out aTime);

g- 通用短格式,对文化敏感。

更多关于这里的标准时间跨度格式字符串

于 2012-10-24T03:49:22.140 回答
0

也许您正在使用多种格式。

public const string TimeFormat1 = "hh\\:mm";
public const string TimeFormat2 = "hh\\:mm:\\ss";
var parsed = TimeSpan.TryParseExact(time, new [] { TimeFormat1, TimeFormat2 }, CultureInfo.CurrentCulture, out TimeSpan ts1);
// parsed is always false

您可能以为您逃脱了结肠;但实际上并没有……

"hh\\:mm:\\ss"行不通。

在 ParseExact 中使用 TimeFormat2 会引发 FormatException...

您打算改用它"hh\\:mm\\:ss"

于 2022-01-02T23:15:49.890 回答