2010-05-12 6 views
0

Je veux calculer le quart d'heure des données deux datetimes:Calculer QuaterlyHour de Compte tenu deux DateTimes en C#

datetime1 Suppose et datetime2, je fais un peu comme ceci:

int d = datetime2.Subtract(datetime1).Hours; 

double l = Math.Round(Convert.ToDouble(d/4)); 

mais si le QuarterHour est 3 (c'est-à-dire d = 3), ce qui est le bon moyen de montrer la sortie - devrait-il être zéro ou le rond: 3/4 = 0,75. donc je devrais arrondir à 1 ou 0 est ok. Et si arrondir à 1. comment devrais-je?

+0

Vous pouvez utiliser 'datetime2.Subtract (datetime1) .Minutes' à la place. –

+0

je veux calculer quaterHour !!! – user281947

+0

mais si vous arrondissez 3/4 jusqu'à 1 vous ne montrez plus les quarts d'heure ... – heisenberg

Répondre

1

Comme obtenir "DateTime.Heures" ne vous permettra pas d'obtenir le quart d'heure seul, ce n'est pas très utile à cet égard. "DateTime.TotalHours" fonctionne presque, mais depuis un quart d'heure est seulement 15 minutes, nous pouvons simplifier de traiter des heures décimales complexes inutiles juste en utilisant cela.

double l = datetime2.Subtract(datetime1).TotalMinutes/15.0 

Vous pouvez entourer cela avec Math.Round ou toute autre méthode similaire pour obtenir un nombre entier d'heures de quart. Utilisez n'importe quelle méthode correspondant à votre style d'arrondi préféré (tel que le plancher ou le plafond). Je recommanderais Math.Round, moi-même.

double l = Math.Round(datetime2.Subtract(datetime1).TotalMinutes/15.0) 

Et si vous voulez exprimer ce que le total des heures avec des fractions étant seulement les heures de quart, il vous suffit de diviser le résultat arrondi par 4.

double l = Math.Round(datetime2.Subtract(datetime1).TotalMinutes/15.0)/4 

Maintenant, supposons au lieu de montrer heures décimal, nous voulions montrer la différence de quart d'heure entre deux dates comme valeur temporelle. Par exemple, rendez 11 heures quart comme "2:45" au lieu de "2.75".Naturellement cela ne fonctionnera pas pour le stockage en tant que nombre réel, mais si vous avez besoin de produire, vous construisez probablement la chaîne comme ceci.

double l = Math.Round(datetime2.Subtract(datetime1).TotalMinutes/15.0)/4 
double dLeft = Math.Floor(l); 
double dRight = (l - dLeft) * 60.0; 
string output = dLeft.ToString() + ":" + dRight.ToString(); 
1

Si vous voulez connaître la différence entre les deux dates/heures en fractions d'une heure (par exemple 0,75), alors cela fera:

DateTime a = new DateTime(2010, 05, 12, 13, 00, 00); 
DateTime b = new DateTime(2010, 05, 12, 13, 45, 00); 
double difference = b.Subtract(a).Minutes/60.0; 

Ici, difference = 0.75

0

Je ne sais pas ce que vous demandent ici. Votre code calcule le nombre d'heures entre les deux dates, le divise par 4 et l'arrondit ensuite. C'est assez étrange à vouloir faire, mais que vous le fassiez ou pas dépend de la raison pour laquelle vous le faites, nous n'avons pas de contexte pour le moment.

0

Après avoir ramassé réponse ccornet, vous pouvez le faire dans quatre doublure fantaisie:

var elapsedTime = DateTime.Now - DateTime.Today; 
var quarterlyMinutes = (Math.Round(elapsedTime.TotalMinutes/15)/4) * 60; 
var quartelySpan = new TimeSpan(0, (int)quarterlyMinutes, 0); 
var output = quartelySpan.ToString(); 

Par cette solution, vous aurez la plus proche heure trimestrielle atteint. Cela signifie qu'à 11h23 ce sera arrondi à 11h30 et 11h22 à 11h15.

Si vous préférez obtenir seulement déjà fullfilled heures trimestrielles, vous pouvez utiliser à la place:

var quarterlyMinutes = (Math.Floor(elapsedTime.TotalMinutes/15)/4) * 60; 

Cela conduira à 11h15 également si le TimeSpan montre déjà sont passés 11:29 minutes.

Last but not least pour obtenir toutes les heures a commencé tous les trois mois, vous pouvez prendre

var quarterlyMinutes = (Math.Ceiling(elapsedTime.TotalMinutes/15)/4) * 60; 

et vous obtiendrez tous commencé trimestre. Donc pour 11:01 cela mènera à 11h15.

Questions connexes