将字符串解析为 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.ParseExactDateTime.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的主要内容,如果未能解决你的问题,请参考以下文章

在 MVC 控制器中将 Javascript 时间字符串转换为 DateTime 或 TimeSpan

.NET TimeSpan 的 T-SQL 检查约束?

Json数据解析

格式化 TimeSpan 字符串

TimeSpan格式化字符串格式(摘)

如何在 .NET 中使用自定义格式对 TimeSpan 对象进行 String.Format ?