我想将包含格式说明符的时间跨度字符串解析为TimeSpan。例如:"2h 57m 43s"
。 h,m和s都是格式说明符。有关更多信息,请参见Custom TimeSpan format strings - .NET | Microsoft Docs。
根据the docs:
格式字符串中的其他任何未转义的字符(包括空格字符)都被解释为自定义格式说明符。在大多数情况下,任何其他未转义的字符都会导致FormatException。
有两种方法可以在格式字符串中包含文字字符:
将其用单引号引起来(文字字符串分隔符)。
以反斜杠(“ \”)开头,该反斜杠被解释为转义字符。这意味着,在C#中,格式字符串必须用@引号,或者文字字符前面必须带有附加的反斜杠。
我尝试过"hh'h 'mm'm 'ss's'"
和@"hh\h mm\m ss\s"
,但没有运气。
TimeSpan tracker;
if (TimeSpan.TryParseExact("2h 57m 43s", @"hh\h mm\m ss\s", null, out tracker))
{
Console.WriteLine(tracker);
}
else
{
Console.WriteLine("fail");
}
这总是失败。我期望的时间跨度为02:57:43
。我目前正在使用正则表达式解决此问题,但想知道如何使用TryParseExact解析此字符串?
答案 0 :(得分:1)
您可以在格式说明符后使用%
,并且需要转义空格。
TimeSpan.TryParseExact("2h 57m 43s", @"h%\h\ m%\m\ s%\s", null, out tracker)
答案 1 :(得分:0)
代码中的次要更新:
TimeSpan tracker;
if (TimeSpan.TryParseExact("02h 57m 43s", @"hh\h' 'mm\m' 'ss\s", null, out tracker))
{
Console.WriteLine(tracker);
}
else
{
Console.WriteLine("fail");
}
问题是它无法理解空格,并且两次'h'与值都不匹配。
希望对您有帮助!