提问人:Lies 提问时间:12/14/2021 最后编辑:Lies 更新时间:12/14/2021 访问量:734
TimeSpan.Parse 字符串,包括天数 dd-hh:mm:ss
TimeSpan.Parse of string including days dd-hh:mm:ss
问:
我要解析
的时间跨度是 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
编辑:我尝试将替换为,但它给出了相同的错误。-
:
答:
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
拜托,我很乐意为您提供进一步的帮助。
评论
TimeSpan result = TimeSpan.ParseExact(source, @"d\-h\:m\:s", null);
在这里,我们用“”转义分隔符