Calcul du nombre de minutes entre deux heures

86

J'ai un datagridview dans mon application qui contient les heures de début et de fin. Je veux calculer le nombre de minutes entre ces deux heures. Jusqu'à présent, j'ai:

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

Mais la dernière ligne ne sera pas compilée car elle indique que j'utilise des arguments non valides pour le constructeur Timespan. J'ai fait pas mal de recherches sur la façon de calculer le nombre de minutes entre deux fois, mais je frappe un peu un mur de briques. Quelqu'un peut-il s'il vous plaît me conseiller sur la meilleure façon d'atteindre mon objectif.

ÉDITER/

Maintenant, mon code est le suivant:

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

Mais je reçois un casting invalide sur la deuxième ligne. VarFinish et varValue sont des heures, par exemple 10h00 et 8h00. Vous ne savez donc pas pourquoi ils ne sont pas castés pour taper DateTime?

PJW
la source
Si varFinish est une chaîne, vous ne pouvez pas convertir une chaîne en DateTime. Vous devez utiliser DateTime.Parse (...). Même dans ce cas, cela impliquera la date du jour s'il n'y a pas de date dans varFinish.
Jim

Réponses:

160

Essaye ça

DateTime startTime = varValue
DateTime endTime = varTime

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

Edit: Si vous essayez «span.Minutes», cela ne renverra que les minutes de la période [0 ~ 59], pour renvoyer la somme de toutes les minutes de cet intervalle, utilisez simplement «span.TotalMinutes».

Kane
la source
2
C'est une bonne réponse, mais donne 0 sur l'intervalle.Minutes lorsque la différence entre deux heures est supérieure à 1 heure (soit 60 minutes ou plus)
Asif Mehmood
6
@MalikAsif. Je viens d'essayer cela avec une durée de 61 minutes et j'obtiens 1 heure et 1 minute, comme prévu. Si la durée était exactement de 60 minutes, alors oui, les minutes seraient nulles. Pensiez-vous TotalMinutes()?
Jim
17
PAS VRAI. span.Minutesrenvoie un nombre [0..59]. Utiliser à la span.TotalMinutesplace
Sten Petrov
2
Cela ne devrait pas être la réponse acceptée. Comme pour les autres commentaires, cela ne résout pas la question correctement.
tjmoore
2
@tjmoore merci pour les commentaires, je suis d'accord avec vous. J'ai répondu à la question initiale en janvier 2012, après quoi la question a été modifiée. Je reçois parfois des votes négatifs pour cette réponse, probablement parce que la plupart des gens lisent la réponse 5 ans après que la question originale non modifiée a été posée.
Kane
35
double minutes = varTime.TotalMinutes;
int minutesRounded = (int)Math.Round(varTime.TotalMinutes);

TimeSpan.TotalMinutes : le nombre total de minutes représentées par cette instance.

Tim Schmelter
la source
2
Oui, TotalMinutes est ce que je recherchais. Merci beaucoup ^ _ ^
Wahid Bitar
int minutesRounded = (int) Math.Round (minutes);
Sagi
9

Dans votre code de question, vous n'utilisez TimeSpan.FromMinutespas correctement. Veuillez consulter la documentation MSDN pour TimeSpan.FromMinutes, qui donne la signature de méthode suivante:

public static TimeSpan FromMinutes(double value)

par conséquent, le code suivant ne compilera pas

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

Au lieu de cela, vous pouvez utiliser la propriété TimeSpan.TotalMinutes pour effectuer cette arithmétique. Par exemple:

TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue; 
double fractionalMinutes = varTime.TotalMinutes;
int wholeMinutes = (int)fractionalMinutes;
Dr Andrew Burnett-Thompson
la source
3

Il vous suffit d'interroger la TotalMinutespropriété comme cecivarTime.TotalMinutes

Alexandre R
la source
1

Si la différence entre endTime et startTime est supérieure ou égale à 60 minutes , l'instruction: endTime.Subtract(startTime).Minutes;retournera toujours (minutesDifference % 60). Ce qui n'est évidemment pas souhaité quand on ne parle que de minutes (pas d'heures ici).
Voici quelques-unes des façons si vous souhaitez obtenir total number of minutes(dans différentes typecasts):

// 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; 
Asif Mehmood
la source