Qua*_*ngo 37 c# parsing timespan
这有点奇怪.如果我想要精确的话,解析具有有效时间跨度的文本字段会失败!
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);
Run Code Online (Sandbox Code Playgroud)
第二个解析失败,异常"输入字符串格式不正确".来自DateTime.
Jon*_*Jon 79
从文档:
格式字符串中的任何其他未转义字符(包括空格字符)都被解释为自定义格式说明符.在大多数情况下,任何其他未转义字符的存在都会导致FormatException.
有两种方法可以在格式字符串中包含文字字符:
将其用单引号括起来(文字字符串分隔符).
在前面加上反斜杠("\"),它被解释为转义字符.这意味着,在C#中,格式字符串必须是@ -quoted,或者文字字符必须以额外的反斜杠开头.
.NET Framework没有为时间间隔中的分隔符定义语法.这意味着天数和小时之间的分隔符,小时和分钟,分钟和秒,以及秒和分数秒必须都被视为格式字符串中的字符文字.
因此,解决方案是将格式字符串指定为
TimeSpan.ParseExact(tmp, "hh\\:mm\\:ss", CultureInfo.InvariantCulture)
Run Code Online (Sandbox Code Playgroud)
试试这个:
var t2 = TimeSpan.ParseExact(tmp, "c", System.Globalization.CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)
来源: 标准TimeSpan格式字符串
如果您不想处理TimeSpan.ParseExact和之间格式说明符的差异,DateTime.ParseExact您可以将字符串解析为 aDateTime并获取TimeOfDay组件,如下所示TimeSpan:
var t2 = DateTime.ParseExact(tmp, "hh:mm:ss", CultureInfo.InvariantCulture).TimeOfDay;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20832 次 |
| 最近记录: |