代码之家  ›  专栏  ›  技术社区  ›  Serhat Ozgel

将字符串分析为TimeSpan

  •  29
  • Serhat Ozgel  · 技术社区  · 16 年前

    我有一些XXH:YYM格式的字符串,其中XX是小时,YY是分钟,如“05H:30M”。将这种类型的字符串转换为TimeSpan的优雅方法是什么?

    5 回复  |  直到 16 年前
        1
  •  27
  •   Lars Mæhlum    16 年前

    这似乎有效,尽管有点老土:

    TimeSpan span;
    
    
    if (TimeSpan.TryParse("05h:30m".Replace("m","").Replace("h",""), out span))
                MessageBox.Show(span.ToString());
    
        2
  •  6
  •   Echilon Mafarnakus    11 年前

    DateTime.ParseExact DateTime.TryParseExact 允许您指定输入的确切格式。在你得到 DateTime ,你可以抓住 DateTime.TimeOfDay 哪个是 TimeSpan .

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

    @Buyutec,正如你所怀疑的,如果时间跨度超过24小时,这种方法将无法工作。

        3
  •  2
  •   Vaibhav    16 年前

    这里有一种可能性:

    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
  •  2
  •   Community Tales Farias    7 年前
        5
  •  1
  •   bdukes Jon Skeet    16 年前

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