0
votes

Avec un pourcentage, comment puis-je obtenir le temps entre deux denttimes?

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 4h00 code> retour. À 100%, je veux obtenir 16h00 code> retour. À 50%, je veux obtenir 10h00 code> retour.

La question est, comment puis-je obtenir cette fonctionnalité avec cette signature? P>

string GetTime(percentage, startTime, endTime)


5 commentaires

Sont starttime et endtime de type DateTime ou string ?


@Phuzi DateTime


Si StartTime et Mintérieur sont DateTimes , vous pouvez les soustraire et obtenir un Timespan . Du Timespan , vous pouvez obtenir la propriété cochs . Convertissez-le à un double , multipliez par votre pourcentage, convertir le résultat à un long . Utilisez cela pour construire un nouveau Timespan . Enfin, ajoutez ce nouvel échantillon à l'extrémité initiale et retournez-la sous forme de DateTime


Si ce sont DateTime avec .Kind == DateTimekind.utc , 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 pris en compte lors de la soustraction des valeurs DateTime . Selon votre cas d'utilisation, vous pourriez être mieux en train de commencer avec DateTimeOffset .


@Mattjohnson bon point. J'aimerais ignorer le concept de DST pour cette question et prétendre que cela n'existe pas.


4 Réponses :




0
votes

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));


0 commentaires

0
votes

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();


0 commentaires