TimeSpan.Parse 字符串,包括天数 dd-hh:mm:ss

TimeSpan.Parse of string including days dd-hh:mm:ss

提问人:Lies 提问时间:12/14/2021 最后编辑:Lies 更新时间:12/14/2021 访问量:734

问:

我要解析
的时间跨度是 Linux 命令的输出,返回进程运行了多长时间。
dd-hh:mm:ss

例:

string s = "5-15:10:20"; // 5 days 15h 10m 20s
TimeSpan.Parse(s);

这将生成错误

System.FormatException was unhandled
Message="Input string was not in a correct format."
Source="mscorlib"
StackTrace:
   at System.TimeSpan.StringParser.Parse(String s)
   at System.TimeSpan.Parse(String s)

重要说明:要用 .net Framework 2.0 编写的代码
有没有办法让正确识别第一个日期部分?
TimeParse

编辑:我尝试将替换为,但它给出了相同的错误。-:

C# net-2.0

评论

0赞 Lies 12/14/2021
我没有提到我也尝试用“:”替换“-”,但它给出了同样的错误
0赞 Dmitry Bychenko 12/14/2021
TimeSpan result = TimeSpan.ParseExact(source, @"d\-h\:m\:s", null);在这里,我们用“”转义分隔符
1赞 JohnG 12/14/2021
你试过“5.15:10:20”吗?
1赞 ihsan güç 12/14/2021
您可以查看链接 = learn.microsoft.com/en-us/dotnet/standard/base-types/...

答:

1赞 Caius Jard 12/14/2021 #1

这对我有用:

TimeSpan.Parse(s.Replace('-', '.'));

正如这样做的那样:

TimeSpan.ParseExact(s, @"d\-hh\:mm\:ss", null);

有关可以使用的格式字符串的详细信息,请参阅手册。它们与 DateTime 格式字符串略有不同

评论

0赞 Lies 12/14/2021
谢谢,你是对的!我不能使用第二个建议,因为 ParseExact 在 .net Framework 2.0 中尚不可用
0赞 ojonasplima 12/14/2021 #2

字符串的问题在于字符“-”是可选的减号,表示负 TimeSpan。因此,您必须在解析字符串之前使用该方法。Replace()

在此链接上,您可以看到与该方法一起使用的所有常见字符。为此,类似的东西会起作用:

string s = "5-15:10:20"; // 5 days 15h 10m 20s
TimeSpan.Parse(s.Replace('-', '.'));
1赞 MK-NEUKO 12/14/2021 #3

我认为“-”绝对是错误的符号。 “-”用于指定负时间跨度 既然你已经尝试过 “:” 胫骨,那么在这一点上用 “.” 试一试。

“.”是将日期与小时分开的官方符号。

评论

0赞 MK-NEUKO 12/14/2021
拜托,我很乐意为您提供进一步的帮助。