将字符串解析为 TimeSpan
Posted
技术标签:
【中文标题】将字符串解析为 TimeSpan【英文标题】:Parse string to TimeSpan 【发布时间】:2010-09-06 19:21:24 【问题描述】:我有一些 xxh:yym 格式的字符串,其中 xx 是小时,yy 是分钟,例如“05h:30m”。将这种类型的字符串转换为 TimeSpan 的优雅方法是什么?
【问题讨论】:
【参考方案1】:这似乎行得通,虽然它有点骇人听闻:
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)
以获得更清洁、更强大的解决方案
字符串为25h:30m时除外
@fubo 任何解决方案不限 ?
如果您需要验证输入字符串是一个有效的时间(>= 00:00 和 :DateTime.TryParseExact("07:35", "HH:mm"
查看***.com/questions/24369059/…【参考方案2】:
DateTime.ParseExact
或 DateTime.TryParseExact
允许您指定输入的确切格式。获得DateTime
后,您可以获取DateTime.TimeOfDay
,即TimeSpan
。
在没有TimeSpan.TryParseExact
的情况下,我认为“优雅”的解决方案是不可能的。
@buyutec 正如您所怀疑的,如果时间跨度超过 24 小时,此方法将不起作用。
【讨论】:
TimeSpan.TryParseExact 已添加到 .NET 4.0。【参考方案3】:这是一种可能性:
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)
怎么样? ***.com/a/26769/206730【参考方案4】:
来自另一个线程:
How to convert xs:duration to timespan
【讨论】:
【参考方案5】:TimeSpan.Parse 和 TimeSpan.TryParse 不是选项吗?如果您没有使用“已批准”格式,则需要手动进行解析。我可能会在正则表达式中捕获您的两个整数值,然后尝试将它们解析为整数,从那里您可以使用其构造函数创建一个新的 TimeSpan。
【讨论】:
以上是关于将字符串解析为 TimeSpan的主要内容,如果未能解决你的问题,请参考以下文章