2013-03-28 3 views
5

В .Net, есть способ конвертировать, скажем, '2:45' в десятичный 2.75?Провести временную строку до десятичной?

например:

decimal d = TimeToDecimal("2:45"); 
Console.WriteLine(d); 

//output is 2.75 

Он должен бросить исключение, если недостоверные данные, экс, минуты < <-60 или не в часе: формат м.

Благодаря

+0

Дубликат http://stackoverflow.com/q/5366285/82682 – joce

+5

@Joce Не шанс. – IronMan84

+0

Полностью. «Жесткая» часть - 'DateTime.Parse()', которая выдает необходимое исключение. Остальное - деление на 60. Это обман. – joce

ответ

13

Следующая будет выводить 2.75:

TimeSpan time = TimeSpan.Parse("2:45"); 
decimal d = (decimal) time.TotalHours; 

Console.WriteLine(d); 

Обратите внимание, что TimeSpan.TotalHours property имеет тип double, не decimal.

Из документации для TimeSpan.Parse method он будет вызывать OverflowException, если «по крайней мере, один из дней, часов, минут или секунд не находится за пределами допустимого диапазона», так что вы должны позаботиться о подтверждении ввода. См. Также TimeSpan.TryParse method.

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

Я думаю, вы хотите, чтобы он читал: 'decimal result = dt.Hour + (dt.Minute/60.0m);' – rsbarro

+0

Я полагаю, лучшим решением будет 'decimal result = dt.Hour + (dt.Minute/60.0m) + (dt.Second/3600.0m); ' – K0D4

Смежные вопросы