Berechnen, wie viele Minuten zwischen zwei Zeiten liegen


85

Ich habe eine Datagrid-Ansicht in meiner Anwendung, die Start- und Endzeiten enthält. Ich möchte die Anzahl der Minuten zwischen diesen beiden Zeiten berechnen. Bisher habe ich:

var varFinish = tsTable.Rows[intCellRow]["Finish Time"];
TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue;
int intMinutes = TimeSpan.FromMinutes(varTime);

Die letzte Zeile wird jedoch nicht kompiliert, da sie besagt, dass ich ungültige Argumente für den Timespan-Konstruktor verwende. Ich habe ziemlich viel darüber recherchiert, wie man die Anzahl der Minuten zwischen zwei Malen berechnet, aber ich stoße auf eine Mauer. Kann mich bitte jemand beraten, wie ich mein Ziel am besten erreichen kann?

BEARBEITEN/

Jetzt lautet mein Code wie folgt:

var varFinish = tsTable.Rows[intCellRow]["Finish Time"];
TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue;
int intMinutes = (int)varTime.TotalMinutes;

Aber ich bekomme eine ungültige Besetzung in der zweiten Zeile. Sowohl varFinish als auch varValue sind Zeiten, z. B. 10:00 und 8:00. Sie sind sich also nicht sicher, warum sie nicht auf DateTime übertragen werden?


Wenn varFinish eine Zeichenfolge ist, können Sie keine Zeichenfolge in eine DateTime umwandeln. Sie müssen DateTime.Parse (...) verwenden. Selbst dann bedeutet dies das heutige Datum, wenn in varFinish kein Datum vorhanden ist.
Jim

Antworten:


155

Versuche dies

DateTime startTime = varValue
DateTime endTime = varTime

TimeSpan span = endTime.Subtract ( startTime );
Console.WriteLine( "Time Difference (minutes): " + span.TotalMinutes );

Bearbeiten: Wenn Sie 'span.Minutes' versuchen, werden nur die Minuten der Zeitspanne [0 ~ 59] zurückgegeben. Um die Summe aller Minuten aus diesem Intervall zurückzugeben, verwenden Sie einfach 'span.TotalMinutes'.


2
Dies ist eine gute Antwort, gibt aber 0 für die Spanne. Minuten, wenn die Differenz zwischen zwei Zeiten größer als 1 Stunde ist (dh 60 Minuten oder mehr)
Asif Mehmood

6
@ MalikAsif. Ich habe es gerade mit einer Zeitspanne von 61 Minuten versucht und bekomme wie erwartet 1 Stunde und 1 Minute. Wenn die Spanne genau 60 Minuten wäre, dann wären die Minuten Null. Hast du daran gedacht TotalMinutes()?
Jim

17
NICHT WAHR. span.Minutesgibt eine Zahl [0..59] zurück. Verwenden Sie span.TotalMinutesstattdessen
Sten Petrov

2
Dies sollte nicht die akzeptierte Antwort sein. Wie aus den anderen Kommentaren hervorgeht, wird die Frage nicht richtig gelöst.
tjmoore

2
@tjmoore danke für das Feedback, ich stimme dir zu. Ich habe die ursprüngliche Frage bereits im Januar 2012 beantwortet, danach wurde die Frage bearbeitet. Ich bekomme gelegentlich Abstimmungen für diese Antwort, wahrscheinlich weil die meisten Leute die Antwort 5 Jahre nach der ursprünglichen, nicht bearbeiteten Frage lesen.
Kane

35
double minutes = varTime.TotalMinutes;
int minutesRounded = (int)Math.Round(varTime.TotalMinutes);

TimeSpan.TotalMinutes : Die Gesamtzahl der Minuten, die von dieser Instanz dargestellt werden.


2
Ja, TotalMinutes ist das, wonach ich gesucht habe. Vielen Dank ^ _ ^
Wahid Bitar

int minuteRounded = (int) Math.Round (Minuten);
Sagi

9

In Ihrem Fragencode verwenden Sie TimeSpan.FromMinutesfalsch. Weitere Informationen finden Sie in der MSDN-Dokumentation zu TimeSpan.FromMinutes, die die folgende Methodensignatur enthält:

public static TimeSpan FromMinutes(double value)

Daher wird der folgende Code nicht kompiliert

var intMinutes = TimeSpan.FromMinutes(varTime); // won't compile

Stattdessen können Sie die TimeSpan.TotalMinutes- Eigenschaft verwenden, um diese Arithmetik auszuführen. Zum Beispiel:

TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue; 
double fractionalMinutes = varTime.TotalMinutes;
int wholeMinutes = (int)fractionalMinutes;

3

Sie müssen nur die TotalMinutesEigenschaft wie folgt abfragenvarTime.TotalMinutes


1

Wenn der Unterschied zwischen endTime und startTime größer oder gleich 60 Minuten ist , wird die Anweisung: endTime.Subtract(startTime).Minutes;immer zurückgegeben (minutesDifference % 60). Offensichtlich ist das nicht erwünscht, wenn wir nur über Minuten sprechen (hier nicht über Stunden).
Hier sind einige der Möglichkeiten, die Sie erhalten möchten total number of minutes(in verschiedenen Typografien):

// Default value that is returned is of type *double* 
double double_minutes = endTime.Subtract(startTime).TotalMinutes; 
int integer_minutes = (int)endTime.Subtract(startTime).TotalMinutes; 
long long_minutes = (long)endTime.Subtract(startTime).TotalMinutes; 
string string_minutes = (string)endTime.Subtract(startTime).TotalMinutes; 
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.