C#中使用TimeSpan.ParseExact解析Excel特殊时长格式失败问题求助
解决TimeSpan.ParseExact解析带括号时长失败的问题
我一眼就揪出问题啦——你在TimeSpan的格式字符串里用了小写的h,这是12小时制的小时说明符,合法取值范围是1-12,但你的输入小时是0,这直接触发了解析失败!
修复方案
把你的durationFormat改成"(H:m:ss.f)",核心就是把小写的h换成大写的H。修改后的代码如下:
var rawDuration = (string)WorkSheet.Range[startValue + (offset)].Value2; // 用大写H表示24小时制小时,适配0值场景 TimeSpan duration = TimeSpan.ParseExact(rawDuration, "(H:m:ss.f)", null); return duration;
为什么DateTime的代码能正常工作?
因为DateTime里的HH是24小时制的小时说明符,允许0-23的数值,和你输入的06完美匹配;而TimeSpan的格式规则和DateTime有细微差异:
- 小写
h:对应12小时制小时,必须在1-12之间,0是不合法值 - 大写
H:对应24小时制小时,支持0及以上的任意整数,完全适配你的输入场景
快速验证
如果你想先确认格式正确性,可以写一段简单的测试代码:
var testStr = "(0:0:20.0)"; var format = "(H:m:ss.f)"; var result = TimeSpan.ParseExact(testStr, format, null); Console.WriteLine(result); // 输出 00:00:20
这段代码应该能正常运行,输出符合预期的TimeSpan结果。
内容的提问来源于stack exchange,提问作者Lars
相关产品推荐
相关产品推荐

