TimeSpan.TryParseExact无法正常工作

我试图从字符串中检索一个时间跨度,但TryParseExact返回false(失败)。

我看不出我做错了什么,你能帮忙吗? 我在代码中尝试了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的自定义格式适用于TimeSpans,但它们没有。

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

冒号字符(:)也需要转义,所以请使用"hh\\:mm\\:ss"@"hh\:mm\:ss""hh':'mm':'ss" 。 这三种forms都会产生同样的效果。

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

虽然HH对DateTime和DateTimeOffset有效,其中它表示24小时时钟,而小写hh表示12小时时钟,但对于TimeSpan – 小时组件始终基于24小时。 你会认为HH格式是选择的,为了统一,但不是 – 它是hh

可能应该提到你需要逃脱冒号角色。

 TryParseExact("04:00:01", "HH\\:mm\\:ss" ... 

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

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

g-一般短格式,对文化敏感。

有关标准时间跨度格式字符串的更多信息