如何在TimeSpan.TryParseExact(...)中处理格式说明符

时间:2019-05-17 15:34:28

标签: c# .net format-string

我想将包含格式说明符的时间跨度字符串解析为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解析此字符串?

2 个答案:

答案 0 :(得分:1)

您可以在格式说明符后使用%,并且需要转义空格。

TimeSpan.TryParseExact("2h 57m 43s", @"h%\h\ m%\m\ s%\s", null, out tracker)

dotnetfiddle

答案 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'与值都不匹配。

希望对您有帮助!