将字符串解析为TimeSpan

时间:2020-03-05 18:42:59  来源:igfitidea点击:

我有一些xxh:yym格式的字符串,其中xx是小时,而yy是分钟,例如" 05h:30m"。有什么绝妙的方法可以将这种类型的字符串转换为TimeSpan?

解决方案

回答

这似乎可行,尽管有点黑:

TimeSpan span;

if (TimeSpan.TryParse("05h:30m".Replace("m","").Replace("h",""), out span))
            MessageBox.Show(span.ToString());

回答

TimeSpan.Parse和TimeSpan.TryParse不是选项吗?如果我们使用的不是"批准"格式,则需要手动进行解析。我可能会在一个正则表达式中捕获两个整数值,然后尝试将它们解析为整数,从那里我们可以使用其构造函数创建一个新的TimeSpan。

回答

DateTime.ParseExact或者DateTime.TryParseExact可以让我们指定输入的确切格式。获取DateTime之后,我们可以获取DateTime.TimeOfDay,它是一个TimeSpan

在没有" TimeSpan.TryParseExact"的情况下,我认为没有"优雅"的解决方案。

@buyutec正如我们所怀疑的,如果时间跨度超过24小时,则此方法将不起作用。

回答

这是一种可能性:

TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1));

并且,如果我们想使其代码更美观,请使用扩展方法:

public static TimeSpan ToTimeSpan(this string s)
{
  TimeSpan t = TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1));
  return t;
}

那你可以做

"05h:30m".ToTimeSpan();

回答

从另一个线程:

如何将xs:duration转换为时间跨度