我有一些xxh:yym格式的字符串,其中xx是小时,yy是分钟,如“05h:30m”。将此类型的字符串转换为TimeSpan的优雅方法是什么?
答案 0 :(得分:27)
这似乎有用,虽然它有点hackish:
TimeSpan span;
if (TimeSpan.TryParse("05h:30m".Replace("m","").Replace("h",""), out span))
MessageBox.Show(span.ToString());
答案 1 :(得分:6)
DateTime.ParseExact
或DateTime.TryParseExact
可让您指定输入的确切格式。获得DateTime
后,您可以抓取DateTime.TimeOfDay
TimeSpan
。
在没有TimeSpan.TryParseExact
的情况下,我认为“优雅”的解决方案是不合适的。
@buyutec如您所料,如果时间跨度超过24小时,此方法将无效。
答案 2 :(得分: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();
答案 3 :(得分:2)
答案 4 :(得分:1)
TimeSpan.Parse和TimeSpan.TryParse不是选项吗?如果您没有使用“已批准”格式,则需要手动进行解析。我可能会在正则表达式中捕获您的两个整数值,然后尝试将它们解析为整数,从那里您可以使用其构造函数创建一个新的TimeSpan。