Je pense que la meilleure façon de décrire ceci est d'utiliser des exemples. La gamme est comprise entre 4h00 et 16h00. À 0%, je veux obtenir La question est, comment puis-je obtenir cette fonctionnalité avec cette signature? P> 4h00 code> retour. À 100%, je veux obtenir 16h00 code> retour. À 50%, je veux obtenir 10h00 code> retour. string GetTime(percentage, startTime, endTime)
4 Réponses :
Le retour d'une date d'heure a plus de sens que de retourner une période de temps.
@Theodorzoulias pourquoi exactement? L'OP veut une différence entre deux dates en pourcentage. Donc, non, ni un tispan code> ou string code> doit être retourné (selon le souhait de l'OP). Je ne comprends pas l'avantage d'un DateTime code> ici.
@ Franzhuber23 L'OP a donné un exemple clair de ce qu'il veut. Pour une fourchette entre 4h00 et 16h00 et un pourcentage de 0%, il veut 4 heures du matin. Il ne veut pas tispan.zero code>.
@Theodorzoulias: tu as raison. Je n'ai pas lu cela correctement. Pour ce que l'OP a suggéré, il n'a pas de sens de renvoyer un DateTime code> (sauf si vous ne le formatez plus tard, ce qui signifie que, en fait, signifie renvoyer une chaîne code> comme @Camilo Terevinto).
Le retour d'une chaîne est horrible IMHO. Le formatage appartient à la couche de présentation.
@Theodorzoulias Vérifiez la section de sortie de ma réponse. Voyez-vous le retour Timespan.zero Code>, toujours?
@Ahmed abdelhamed non, ça ne le fait pas. Mon erreur. Vous ne pouvez pas formater de nouvelles tispan (16, 0, 0) à 4h00. Le formatage des horaires est limité.
En supposant que les deux denttimes sont dans le même fuseau horaire et qu'il n'y a pas de transition (DST démarré / terminé, heure locale modifiée, etc.): Vous pouvez tester cela dans cette Fiddle: https://dotnetfiddle.net/g4ghlj p> p>
Voici comment le faire avec juste DateTimes code> comme entrées et sorties: var start = DateTime.Today;
var end = DateTime.Now;
Debug.WriteLine(Struct128.GetTime(0.5, start, end));
Vous devrez d'abord trouver la durée entre le temps de début et de fin et calculez la fraction de celle qui doit être ajoutée à l'heure de début ...
DateTime GetTime(double percentage, DateTime startTime, DateTime endTime)
{
var duration = endTime - startTime;
var partDuration = percentage * (double)duration.TotalMilliseconds;
return startTime.AddMilliseconds(partDuration);
}
GetTime(0.5, DateTime.Today.AddHours(4), DateTime.Today.AddHours(16)).Dump();
Sont
starttime code> etendtime code> de typeDateTime code> oustring code>?@Phuzi DateTime
Si StartTime et Mintérieur sont
DateTimes CODE>, vous pouvez les soustraire et obtenir unTimespan code>. DuTimespan code>, vous pouvez obtenir la propriétécochs code>. Convertissez-le à undouble code>, multipliez par votre pourcentage, convertir le résultat à unlong code>. Utilisez cela pour construire un nouveauTimespan code>. Enfin, ajoutez ce nouvel échantillon à l'extrémité initiale et retournez-la sous forme de DateTimeSi ce sont
DateTime code> avec.Kind == DateTimekind.utc code>, alors sûr - il suffit de les soustraire. Mais s'ils sont quelque chose d'autre alors soyez prudent parce que les transitions de fuseau horaire, telles que pour le temps d'économie de jour et les modifications de temps standard sont pas i> pris en compte lors de la soustraction des valeurs code> DateTime CODE>. Selon votre cas d'utilisation, vous pourriez être mieux en train de commencer avecDateTimeOffset code>.@Mattjohnson bon point. J'aimerais ignorer le concept de DST pour cette question et prétendre que cela n'existe pas.