题
我有一些 xxh:yym 格式的字符串,其中 xx 是小时,yy 是分钟,例如“05h:30m”。将这种类型的字符串转换为 TimeSpan 的优雅方法是什么?
解决方案
这似乎有效,尽管有点黑客:
TimeSpan span;
if (TimeSpan.TryParse("05h:30m".Replace("m","").Replace("h",""), out span))
MessageBox.Show(span.ToString());
其他提示
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();
来自另一个线程:
是 时间跨度解析 和 时间跨度.TryParse 没有选项?如果您没有使用“批准的”格式,则需要手动进行解析。我可能会在正则表达式中捕获两个整数值,然后尝试将它们解析为整数,从那里您可以使用其构造函数创建一个新的 TimeSpan 。
不隶属于 StackOverflow