12
votes

Timespan entre maintenant et la prochaine heure?

Il est 8h30 et j'essaie de découvrir combien de secondes il y a entre maintenant et la prochaine heure entière (9h00). Je pense que je veux juste DateTime.now.addhours (1 ) mais après que je fasse cela, je pense avoir besoin du "plancher". Comment obtenir cette valeur?

merci.


0 commentaires

11 Réponses :


4
votes

Vous n'avez pas à vous désordre avec des plafonds et des sols. datetime.hour < / strong> propriété représente tout heures (c'est un entier de 0 et 23) de l'heure de la journée représentée par la dateTime. Vous pouvez utiliser ceci et le datetime.date Propriété Pour supprimer les composants de la dateTime que vous ne voulez pas (données de la sous-heure), puis soustraire si nécessaire pour produire un Timespan . < Pré> xxx

Vous pouvez bien sûr extraire le composant totaseconds de la trajectoire résultat si vous voulez le résultat en secondes.


2 commentaires

Cela équivaut toujours à 1 heure. Vous devez enlever les minutes en quelque sorte.


@smoore: Non, ça ne le fait pas. C'est correct. datetime.hour est un int qui représente entiers heures.



1
votes

Vous devez donc soustraire le procès-verbal «reste», trouvez la différence et multipliez cela de 60, non?


0 commentaires

22
votes

Juste arrondir l'heure de la journée en heures jusqu'à la valeur intégrale suivante: xxx


0 commentaires

1
votes

Que diriez-vous: xxx

ou (peut-être plus clair): xxx


0 commentaires

0
votes

Je ferais Timespan.Parse 08:30, ajoutez 1 heure à l'objet, puis récupérez la partie Hour et construisez une nouvelle chaîne avec: 00 comme le procès-verbal et répétez la nouvelle chaîne. Il peut y avoir un moyen plus efficace de le faire, mais je trouve cette technique pour lire.


0 commentaires

1
votes

Que diriez-vous de cela:

 var currentTime = DateTime.Now;
 var hour = currentTime.AddHours(1).Hour;
 var newTime = Convert.ToDateTime(hour + ":00");
 var timespan = newTime.Subtract(currentTime);
 var secondsDiff = timespan.TotalSeconds;


0 commentaires

1
votes
TimeSpan sec = new TimeSpan(0, 0, 3600 - (DateTime.Now.Minute * 60));

0 commentaires

7
votes

// complètement mal interprété. Réécriture totalement

Je ferais juste quelque chose comme ça xxx


0 commentaires

1
votes
TimeSpan result =  (new DateTime(DateTime.Now.Year, DateTime.Now.Month, 
DateTime.Now.Day, DateTime.Now.Hour + 1, 0, 0)).Subtract(DateTime.Now);
Basically here you are building a new DateTime that is one hour on from Now, with no minutes or seconds, then you subtract Now from this and have your result.

0 commentaires

5
votes

Cela semble être le plus simple: xxx

(si vous le souhaitez en nombres entiers - entier - alors préfixe datetime.now ... avec avec < code> (int) .


6 commentaires

C'est en fait: 3600 - DateTime.NOW.TimeOdday.TotalSeconds% 3600. Mais +1 pour la solution la plus courte.


@Nightdweller Je suppose que vous avez commenté une version antérieure de la réponse. C'est corrigé :)


:) tant de solutions différentes si rapides - vous êtes obligé de manquer quelque chose. Cela peut ne pas être une compétition (et c'est) - mais je pense que vous devriez gagner :)


Oh - et je pense que vous voulez dire la plupart simple :)


@Nnightdweller merci :) L'anglais est, malheureusement, pas ma langue maternelle.


Je pense que cette réponse serait meilleure si vous avez expliqué pourquoi le numéro est 3600 .



1
votes

une version plus lisible: xxx


0 commentaires