2016-03-23 8 views
1

Ich bekomme von TimeSpan.TotalHours 24,75 Stunden. Wie kann ich dies konvertieren, um die vollen und nicht roundes Stunden (= 24) plus die Minuten (0,75hours = 45 Minuten) zu erhalten? Also sollte das Ergebnis Stunden = 24 und Minuten = 45Auszug aus Timespan Totalhours und Minuten

Ich habe versucht, es in Zeichenfolge zu konvertieren und Teilstring machen, aber ich würde gerne wissen, ob es einen besseren Weg als dies gibt.

string test = Reststunden.TotalHours.ToString().Substring(Reststunden.TotalHours.ToString().IndexOf(","),3).Replace(",", ""); 
double Minuten = Convert.ToInt16(test) * 0.6; 

Antwort

4

Wie wäre:

var ts = TimeSpan.FromHours(24.75); 
var h = System.Math.Floor(ts.TotalHours); 
var m = (ts.TotalHours - h) * 60; 

Oder auch:

var h = (int) (ts.TotalMinutes/60); 
var m = ts.TotalMinutes % 60; 
+0

es rundet die Stunden ab, ich brauche sie ungerundet –

+0

Das funktioniert ziemlich gut und ist einfach zu implementieren. –

+0

Ich mag Skeets Antwort immer noch besser :-) – lesscode

3

Nun runden nur die Gesamtzahl der Stunden in geeigneter Weise durch Gießen, und verwenden Sie dann die Minutes Eigenschaft:

int hours = (int) timeSpan.TotalHours; 
int minutes = timeSpan.Minutes; 

Wenn Sie jemals eine negative TimeSpan haben werden, sollten Sie darüber nachdenken, was Sie die Ergebnisse wollen zu sein und entsprechende Tests hinzuzufügen - Sie können vielleicht feststellen, dass es mit dem obigen einfachen Code nicht das tut, was Sie wollen.

+2

Warum Gebrauch TotalHours statt Stunden? –

+2

Da könnte TotalHours 49 sein. Stunden wären in diesem Fall 1. Nein? Immer wenn ich @ Jon Skeet eine Frage beantworte, wird diese Frage beantwortet. Kudos, mein Freund. –

+0

@o_weisman: Genau das, was Max im Grunde gesagt hat. Lesen Sie die Dokumente für die Eigenschaft "Stunden" und vergleichen Sie diese mit der Anfrage des OP. –