这有点奇怪。如果我试着准确的话,解析具有有效时间跨度的文本字段会失败!
const string tmp = "17:23:24";
//works
var t1 = TimeSpan.Parse(tmp);
//fails
var t2 = TimeSpan.ParseExact(tmp, "hh:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
第二个解析失败,异常“输入字符串格式不正确”。来自DateTime。
答案 0 :(得分:69)
格式字符串中的任何其他未转义字符,包括 空格字符,被解释为自定义格式说明符。在 在大多数情况下,任何其他未转义字符的存在都会导致a 出现FormatException。
有两种方法可以在格式字符串中包含文字字符:
将其用单引号括起来(文字字符串分隔符)。
在前面加上反斜杠(“\”),它被解释为转义字符。这意味着,在C#中,格式字符串必须 要么是@ -quoted,要么文字字符必须以a开头 额外的反斜杠。
.NET Framework没有及时为分隔符定义语法 间隔。这意味着天和小时之间的分隔符, 小时和分钟,分钟和秒,以及秒和分数 第二个必须全部被视为格式字符串中的字符文字。
因此,解决方案是将格式字符串指定为
TimeSpan.ParseExact(tmp, "hh\\:mm\\:ss", CultureInfo.InvariantCulture)
答案 1 :(得分:8)
试试这个:
var t2 = TimeSpan.ParseExact(tmp, "c", System.Globalization.CultureInfo.InvariantCulture);
答案 2 :(得分:4)
如果您不想处理TimeSpan.ParseExact
和DateTime.ParseExact
之间格式说明符的差异,您只需将字符串解析为DateTime
并获取{{1像这样的TimeOfDay
组件:
TimeSpan
答案 3 :(得分:2)
似乎HH并非真正用于TimeSpan
自定义TimeSpan格式说明符不包含占位符 分隔符号,例如将小时与小时分开的符号, 几分钟或几秒钟的小时数。相反,这些 符号必须作为字符串包含在自定义格式字符串中 文字。例如,“dd.hh \:mm”将句点(。)定义为 天和小时之间的分隔符,以及冒号(:)作为分隔符 小时和分钟之间。
因此正确的方式是Jon提到使用“\” Read More来逃避
<击>
您的TimeSpan
“17:23:24”这是24小时格式,应该使用HH
格式解析,而不是hh
12小时格式。
TimeSpan.ParseExact(tmp, "HH:mm:ss",System.Globalization.CultureInfo.InvariantCulture);
查看the formats
击>
答案 4 :(得分:0)
试试这个:
var t2 = TimeSpan.ParseExact(tmp, "HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
答案 5 :(得分:0)
使用此 有用 使用
TimeSpan.ParseExact(value, “h\\:mm”, CultureInfo.InvariantCulture);