格式时间跨度不正确

时间:2010-02-07 16:16:28

标签: c# .net parsing timespan

我目前正在尝试转换给定时间(通过文本框输入),输入的时间看起来有点像01 52 22分钟秒的mili secs。

然而,Timespan.parse(tbName.text)给出了错误的格式错误。

如果我在文本框中输入类似46的内容,我就可以使用它,但是它将日期设置为46而不是秒。

如何获取它只是为了设置上述文本输入的分钟秒和毫秒数?

我很确定timepan是要走的路,但我读过的很多帖子都使用了dateTime,并且只通过格式化使用变量的时间部分

2 个答案:

答案 0 :(得分:1)

关于MDSN的精彩文档,您是否先在那里寻找?

http://msdn.microsoft.com/en-us/library/se73z7b9.aspx

答案 1 :(得分:1)

要解析的字符串的规范是

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

其中ws是空格,d是从0到10675199的天数,其余的含义是显而易见的(如果你不知道如何阅读这样的规范,方括号中的项目是可选,并且必须从花括号 1 内的项目中选择一个项目。因此,如果您要将"01 52 22"解析为TimeSpan TimeSpan.Minutes == 1TimeSpan.Seconds == 52TimeSpan.Milliseconds == 22,那么您需要将输入重新格式化为"00:01:52.22"并解析

string s =“00:01:52.22”;    TimeSpan t = TimeSpan.Parse;;

或者自己解析字符串

string s = "01 52 22";
string[] fields = s.Split(' ');
int minutes = Int32.Parse(fields[0]);
int seconds = Int32.Parse(fields[1]);
int milliseconds = Int32.Parse(fields[2]);
TimeSpan t = new TimeSpan(0, 0, minutes, seconds, millseconds);
  

如果我在文本框中输入类似46的内容,我就可以使用它,但是它将日期设置为46而不是秒。

因此,参考上面的规范,"46"解析为TimeSpan TimeSpan.Days == 46的原因是因为再次查看规范

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

没有空格,没有-,没有尾随空格,我们简化为查看

d

[d.]hh:mm[:ss[.ff]]

"46"显然符合以前的规范,因此就像你所见的一样解析。

1 :帮自己一个忙,学习正则表达式;虽然上述内容不是正则表达式,但了解它们将有助于您阅读上述规范。我推荐Mastering Regular Expressions。理解正式语法也有帮助。

相关问题