2013-03-28 12 views
5

W .Net, czy istnieje sposób przekonwertowania, powiedzmy, '2:45' na liczbę dziesiętną 2,75?Łańcuch czasu analizy do dziesiętnego?

Np

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

//output is 2.75 

Należy wyjątek, jeżeli nieprawidłowych danych, np, minuty 60 lub nie na godzinę: format m.

Dzięki

+0

Duplikat http://stackoverflow.com/q/5366285/82682 – joce

+5

@Joce Nie ma szans. – IronMan84

+0

Całkowicie. Część "trudna" to 'DateTime.Parse()', która wyrzuci wymagany wyjątek. Reszta to dzielenie przez 60. To jest dupek. – joce

Odpowiedz

13

Poniższy wyjście będzie 2.75:

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

Console.WriteLine(d); 

Zauważ, że TimeSpan.TotalHours property jest typu double, nie decimal.

Z dokumentacji dla TimeSpan.Parse method wyrzuci ona OverflowException, jeśli "Co najmniej jeden z komponentów dni, godzin, minut lub sekund znajduje się poza jej prawidłowym zakresem", więc powinien zająć się sprawdzaniem poprawności danych wejściowych. Zobacz także 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

Myślę, że chcesz go przeczytać: 'wynik dziesiętny = dt.Hour + (dt.Minute/60.0m);' – rsbarro

+0

Przypuszczam, że najlepszym rozwiązaniem byłoby 'wynik dziesiętny = dt.Hour + (dt.Minute/60.0m) + (dt.Second/3600.0m); ' – K0D4

Powiązane problemy