我有一些xxh:yym格式的字符串,其中xx是小时,而yy是分钟,例如" 05h:30m"。 有什么绝妙的方法可以将这种类型的字符串转换为TimeSpan?
这似乎可行,尽管有点黑:
1 2 3 4 5
| 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小时,则此方法将不起作用。
从另一个线程:
如何将xs:duration转换为时间跨度
这是一种可能性:
1
| TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1)); |
而且,如果您想使其代码更美观,请使用扩展方法:
1 2 3 4 5
| public static TimeSpan ToTimeSpan(this string s)
{
TimeSpan t = TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1));
return t;
} |
那你可以做
TimeSpan.Parse和TimeSpan.TryParse不是选项吗?如果您使用的不是"批准"格式,则需要手动进行解析。我可能会在正则表达式中捕获两个整数值,然后尝试将它们解析为整数,然后从那里可以使用其构造函数创建一个新的TimeSpan。