30

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

4

5 回答 5

27

这似乎可行,尽管它有点骇人听闻:

TimeSpan span;


if (TimeSpan.TryParse("05h:30m".Replace("m","").Replace("h",""), out span))
            MessageBox.Show(span.ToString());
于 2008-08-25T20:20:22.953 回答
7

DateTime.ParseExactDateTime.TryParseExact让您指定输入的确切格式。拿到 后DateTime,就可以抢到DateTime.TimeOfDaywhich is a 了TimeSpan

在没有 的情况下TimeSpan.TryParseExact,我认为“优雅”的解决方案是不可能的。

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

于 2008-08-25T20:23:51.090 回答
2

这是一种可能性:

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();
于 2008-08-25T20:24:25.177 回答
2

从另一个线程:

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

于 2009-06-04T20:36:28.650 回答
1

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

于 2008-08-25T20:22:29.253 回答