如何从字符串中解析出小时、分钟和秒,并将其转换为TimeSpan对象?

5

我正在通过查询字符串传递一个字符串作为时间单位。但是当我尝试将字符串解析为时间跨度对象时,我会收到一个 System.FormatException' occurred in mscorlib.ni.dll but was not handled in user code 的错误,我猜测这意味着我格式化字符串的方式存在问题。

            if (NavigationContext.QueryString.ContainsKey("workTimeSpanPkr"))
            {
                testString = NavigationContext.QueryString["workTimeSpanPkr"];
                //Assign text box string value to a test time span variable.
                 testTm = TimeSpan.ParseExact(testString, @"hh\ \:\ mm\ \:\ ss", CultureInfo.InvariantCulture);

            }

当我通过调试器运行时传递给testString的字符串是:"00:15:04"。

有人知道解析小时、分钟和秒的正确格式吗?
这是我正在尝试解析的值和我使用的代码:

format exception value of work string

3
为什么字符串字面值上要使用所有这些转义字符(@)?听起来解析格式应该是“hh:mm:ss”。 - BradleyDotNET
2
它真的被引用成那样吗?- 单引号、双引号、字符串、双精度、单精度、单精度 - 这不对。 - pm100
通过这么简单的解析,你可能只需要使用 TimeSpan.ParseTimeSpan.TryParse - MikeH
1
@BradleyDotNET 一个常见的错误。DateTime和TimeSpan格式不同。http://msdn.microsoft.com/en-us/library/ee372287(v=vs.110).aspx - L.B
@L.B 每天学点新东西。感谢分享链接! - BradleyDotNET
1个回答

5
以下内容对我来说很好用:
Console.WriteLine(TimeSpan.ParseExact("00:15:04", @"hh\:mm\:ss", CultureInfo.InvariantCulture, TimeSpanStyles.None));

如果您想匹配00:15:04这个示例,应该从格式字符串中删除空格。此外,您可能需要阅读http://msdn.microsoft.com/en-us/library/ee372287(v=vs.110).aspx

我最初是解析一个在文本框中输入的实际字符串,这就是为什么上面的格式化无法工作的原因。我现在传递的新字符串是TimeSpan类型的,所以没有空格,这就是问题所在。上面的解决方案起作用了,谢谢。 - Brian Var
我重新运行了代码,但又出现了格式异常,很奇怪。这是我根据您的示例进行解析的方式:workTm = TimeSpan.ParseExact(wrkString, @"hh\:mm\:ss", CultureInfo.InvariantCulture, TimeSpanStyles.None); - Brian Var
这是为什么发生的任何想法? - Brian Var
1
@BrianJ 如果这种情况发生了,那就意味着你所声称的 wrkString 字符串并不是你所说的那样。请在调试器中发布字符串的屏幕截图。 - Scott Chamberlain
刚刚添加了一个来自wrkString值调试器的屏幕截图。 - Brian Var
您的查询字符串值正在被选择,包括=符号,原因不明。 - Adam Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接