【问题标题】:Parse string to TimeSpan将字符串解析为 TimeSpan
【发布时间】:2010-09-06 19:21:24
【问题描述】:

我有一些 xxh:yym 格式的字符串,其中 xx 是小时,yy 是分钟,例如“05h:30m”。将这种类型的字符串转换为 TimeSpan 的优雅方法是什么?

【问题讨论】:

    标签: c# 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"查看stackoverflow.com/questions/24369059/…
    【解决方案2】:

    DateTime.ParseExactDateTime.TryParseExact 允许您指定输入的确切格式。获得DateTime 后,您可以获取DateTime.TimeOfDay,即TimeSpan

    在没有TimeSpan.TryParseExact 的情况下,我认为“优雅”的解决方案是不可能的。

    @buyutec 正如您所怀疑的,如果时间跨度超过 24 小时,此方法将不起作用。

    【讨论】:

    【解决方案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();
    

    【讨论】:

    【解决方案4】:

    来自另一个线程:

    How to convert xs:duration to timespan

    【讨论】:

      【解决方案5】:

      TimeSpan.ParseTimeSpan.TryParse 不是选项吗?如果您没有使用“已批准”格式,则需要手动进行解析。我可能会在正则表达式中捕获您的两个整数值,然后尝试将它们解析为整数,从那里您可以使用其构造函数创建一个新的 TimeSpan。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多