Parse string to TimeSpan

前端 未结 5 1127
北海茫月
北海茫月 2020-12-17 08:11

I have some strings of xxh:yym format where xx is hours and yy is minutes like \"05h:30m\". What is an elegant way to convert a string of this type to TimeSpan?

相关标签:
5条回答
  • 2020-12-17 08:51

    DateTime.ParseExact or DateTime.TryParseExact lets you specify the exact format of the input. After you get the DateTime, you can grab the DateTime.TimeOfDay which is a TimeSpan.

    In the absence of TimeSpan.TryParseExact, I think an 'elegant' solution is out of the mix.

    @buyutec As you suspected, this method would not work if the time spans have more than 24 hours.

    0 讨论(0)
  • 2020-12-17 08:53

    From another thread:

    How to convert xs:duration to timespan

    0 讨论(0)
  • 2020-12-17 08:56

    This seems to work, though it is a bit hackish:

    TimeSpan span;
    
    
    if (TimeSpan.TryParse("05h:30m".Replace("m","").Replace("h",""), out span))
                MessageBox.Show(span.ToString());
    
    0 讨论(0)
  • 2020-12-17 09:11

    Here'e one possibility:

    TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1));
    

    And if you want to make it more elegant in your code, use an extension method:

    public static TimeSpan ToTimeSpan(this string s)
    {
      TimeSpan t = TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1));
      return t;
    }
    

    Then you can do

    "05h:30m".ToTimeSpan();
    
    0 讨论(0)
  • 2020-12-17 09:11

    Are TimeSpan.Parse and TimeSpan.TryParse not options? If you aren't using an "approved" format, you'll need to do the parsing manually. I'd probably capture your two integer values in a regular expression, and then try to parse them into integers, from there you can create a new TimeSpan with its constructor.

    0 讨论(0)
提交回复
热议问题