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

时间:2014-02-19 08:02:41

标签: c# timespan

以下代码给出了错误,如上标题所示:

TimeSpan my_hours = new TimeSpan();
my_hours = TimeSpan.Parse("00:00");
my_hours += TimeSpan.Parse("25:07"); //this line throws error

在最后一行之前,my_hours的值是4.01:33:00。如何解决此错误?

基本上这个代码在for循环中运行,值“25:07”不断变化,它会在my_hours中添加并继续执行,直到它尝试添加此值“25:07”,当my_hours的当前值为4.01:33:00并抛出错误。

3 个答案:

答案 0 :(得分:2)

将第三行更改为my_hours += TimeSpan.Parse("00:25:07")

您可以阅读TimeSpan.Parse() on MSDN的预期格式:

  

s参数包含以下形式的时间间隔规范:

     

[ws][-]{ d | [d.]hh:mm[:ss[.ff]] }[ws]

所以最低要求是hh:mm。当您输入25:07时,它被解释为25小时7分钟,这是非法值(因为小时需要在0-23之间)。

在前面添加00:会将其更改为0小时25分7秒,现在是解析的合法值。

答案 1 :(得分:2)

如果您想使用超过24小时,则必须使用其他格式。 Parse接受的格式记录在案

[ws][-]{ d | [d.]hh:mm[:ss[.ff]] }[ws]

所以你必须指定1.01:07 1天,1小时7分钟。

答案 2 :(得分:1)

根据TimeSpan.Parse文档,预期字符串的格式为

  

[ws] [ - ] {d | [d。] hh:mm [:ss [.ff]]} [ws]

其中hh是小时,范围从0到23.因此,字符串25:07被视为hh:mm字符串,小时值为25.这会给你OverflowException。

如果您想添加25小时,则应添加1天1小时1:01:07。如果那应该是25分钟,那么使用格式为秒00:25:07