【发布时间】:2010-09-06 19:21:24
【问题描述】:
我有一些 xxh:yym 格式的字符串,其中 xx 是小时,yy 是分钟,例如“05h:30m”。将这种类型的字符串转换为 TimeSpan 的优雅方法是什么?
【问题讨论】:
我有一些 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.TryParse("hh'h:'mm'm'", out span) 以获得更清洁、更强大的解决方案
DateTime.TryParseExact("07:35", "HH:mm"查看stackoverflow.com/questions/24369059/…
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();
【讨论】:
TimeSpan.TryParse("hh'h:'mm'm'", out span) 怎么样? stackoverflow.com/a/26769/206730
【讨论】:
TimeSpan.Parse 和 TimeSpan.TryParse 不是选项吗?如果您没有使用“已批准”格式,则需要手动进行解析。我可能会在正则表达式中捕获您的两个整数值,然后尝试将它们解析为整数,从那里您可以使用其构造函数创建一个新的 TimeSpan。
【讨论】: