TimeSpan.Parse错误

use*_*er1 2 c# parsing timespan

TimeSpan timeTaken = TimeSpan.Parse("51:45:33");
Run Code Online (Sandbox Code Playgroud)

给我错误:

mscorlib.dll中出现"System.OverflowException"类型的异常,但未在用户代码中处理

附加信息:无法解析TimeSpan,因为至少有一个数字组件超出范围或包含太多数字.

为什么?

Ily*_*nov 6

考虑具有单个字符串参数的TimeSpan.Parse方法的文档.
输入字符串的格式为:

[ws][-]{ d | [d.]hh:mm[:ss[.ff]] }[ws]
Run Code Online (Sandbox Code Playgroud)

为简单起见,只考虑[d.]hh:mm[:ss]部分,其中dss分别为天,秒,它们是可选的.

  • hh 组件是小时,范围从0到23.
  • d 组件是天,范围从0到10675199.

在你的情况下hh:mm:ss格式化输入51:45:33具有hh等于51的部件,这就是为什么你得到溢出异常.天数可达10675199,因此您需要从51小时(即2天3小时)中选择整天.

结果代码看起来像是:

TimeSpan timeTaken = TimeSpan.Parse("2.3:45:33");
Run Code Online (Sandbox Code Playgroud)

还要注意有关文化敏感符号.和信息的信息 :.

要验证答案,您可以打印总分钟数

Console.WriteLine(timeTaken.TotalMinutes);     //prints 3105.55

Console.WriteLine(51 * 60 + 45 + 33f / 60);    //also prints 3105.55
Run Code Online (Sandbox Code Playgroud)