Reputation: 54113
In .Net, is there a way to convert, say, '2:45'
to the decimal 2.75?
ex:
decimal d = TimeToDecimal("2:45");
Console.WriteLine(d);
//output is 2.75
It should throw an exception if invalid data, ex, minutes < 0 < 60 or not in the h:m format.
Thanks
Upvotes: 5
Views: 261
Reputation: 16606
The following will output 2.75
:
TimeSpan time = TimeSpan.Parse("2:45");
decimal d = (decimal) time.TotalHours;
Console.WriteLine(d);
Note that the TimeSpan.TotalHours
property is of type double
, not decimal
.
From the documentation for the TimeSpan.Parse
method, it will throw an OverflowException
if "At least one of the days, hours, minutes, or seconds components is outside its valid range", so that should take care of input validation for you. See also the TimeSpan.TryParse
method.
Upvotes: 13
Reputation: 2603
private decimal TimeToDecimal(string Time)
{
DateTime dt = DateTime.Parse(Time);
decimal result = dt.Hour+ (dt.Minute / 60.0m);
return result;
}
Upvotes: 4