2013-03-28 19 views
5

In .Net gibt es eine Möglichkeit, beispielsweise '2:45' in die Dezimalzahl 2,75 zu konvertieren?Parse Zeit String zu dezimal?

ex:

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

//output is 2.75 

Es sollte eine Ausnahme, wenn ungültige Daten, ex, Minuten 60 oder nicht in der h werfen: m-Format.

Dank

+0

Duplizieren von http://stackoverflow.com/q/5366285/82682 – joce

+5

@Joce keine Chance. – IronMan84

+0

Total. Der "harte" Teil ist 'DateTime.Parse()', der die erforderliche Ausnahme auslöst. Der Rest besteht darin, durch 60 zu teilen. Dies ist ein Betrogener. – joce

Antwort

13

Der folgende Wille Ausgang 2.75:

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

Console.WriteLine(d); 

Beachten Sie, dass die TimeSpan.TotalHours property vom Typ double, nicht decimal.

Aus der Dokumentation für die TimeSpan.Parse method, wird OverflowException geworfen, wenn "mindestens eine der Tage, Stunden, Minuten oder Sekunden Komponenten außerhalb seiner gültigen Bereich ist", so dass die Eingabe Validierung für Sie kümmern sollte. Siehe auch die 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

Ich denke, Sie wollen es lesen: 'Dezimal Ergebnis = dt.Hour + (dt.Minute/60.0m);' – rsbarro

+0

Ich nehme an, die beste Lösung wäre 'Dezimal Ergebnis = dt.Hour + (dt.Minute/60.0m) + (dt.Sekunde/3600.0m); ' – K0D4