Dans mon application, j'ai un ticker qui s'exécute toutes les 5 secondes. J'ai aussi une horloge interne et je veux détecter quand le jour change. Pour tester, j'ai essayé le code suivant sans succès:
DateTime C = new DateTime(2019, 6, 20, 12, 58, 29); DateTime D = new DateTime(2019, 6, 20, 12, 59, 29);
Si je vérifie si TotalDays> 0 je détecte avec succès le changement de jour mais dans le cas suivant (avec une différence d'une minute)
DateTime A = new DateTime(2019, 6, 20, 23, 58, 29); DateTime B = new DateTime(2019, 6, 21, 00, 01, 12); Int32 dd = (B-A).Days; // it returns 0 double dd = (B-A).TotalDays; // it return 0.00002136213
la comparaison échoue. Puisque j'ai besoin d'appeler une méthode lorsque le jour change, avec l'exemple ci-dessus, il est appelé à chaque fois et je ne veux pas de ce behevior. Un indice?
3 Réponses :
Ne regardez que les parties Date
DateTime A = new DateTime(2019, 6, 20, 23, 58, 29); DateTime B = new DateTime(2019, 6, 21, 00, 01, 12); Int32 dd = (B.Date-A.Date).Days;
comparer directement une partie Date
de DateTime
bool isSameDay = (A.Date == B.Date);
Pour votre ticker, pourquoi ne pas utiliser les variables TimeSpan pour compléter votre comparaison. Vous définissez 1 variable de période statique sur 24 heures (1 jour), puis créez une variable secondaire pour stocker les valeurs. Vous définissez ensuite votre deuxième variable de durée égale à la soustraction de vos deux jours et cela vous permettra de savoir si un jour s'est écoulé.
`
TimeSpan newDayReference = new TimeSpan(24,0,0); TimeSpan comparison; //These two variables set to show difference. DateTime A= DateTime.Now.AddDays(-1); DateTime B = DateTime.Now; comparison = B - A; if(comparison > newDayReference){ //success }
` p>
Que voulez-vous dire, voulez-vous savoir quand 24 heures se sont écoulées ou simplement quand l'application est en cours d'exécution depuis un jour, puis changer la valeur?
Le résultat est correct. Vous voudrez peut-être régler l'heure des deux dates sur 00:00:00, puis soustraire. Essayez (B.Date - A.Date).
Votre réponse est ici ( stackoverflow.com/ questions / 8480063 /… )
@AnilGoel Je pense que la vôtre est la meilleure solution, merci