jmasterx
jmasterx

Reputation: 54113

Parse time string to decimal?

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

Answers (2)

Lance U. Matthews
Lance U. Matthews

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

K0D4
K0D4

Reputation: 2603

private decimal TimeToDecimal(string Time)
{
    DateTime dt = DateTime.Parse(Time);
    decimal result = dt.Hour+ (dt.Minute / 60.0m);
    return result;
}

Upvotes: 4

Related Questions