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?
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());
DateTime.TryParseExact("07:35", "HH:mm"
view #24369559 –
Sot 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.
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.
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();
TimeSpan.TryParse("hh'h:'mm'm'", out span)
? https://mcmap.net/q/275906/-parse-string-to-timespan –
Sot From another thread:
© 2022 - 2024 — McMap. All rights reserved.
TimeSpan.TryParse("hh'h:'mm'm'", out span)
for a cleaner and more robust solution – Partite