Je dois détecter si deux périodes de temps se chevauchent.
Chaque période a une date de début et une date de fin.
Je dois détecter si ma première période de temps (A) se chevauche avec une autre (B/C).
Dans mon cas, si le début de B est égal à la fin de A, ils ne se chevauchent pas (et inversement)
J'ai trouvé les cas suivants :
Donc en réalité, je fais cela :
tStartA < tStartB && tStartB < tEndA //Pour le cas 1
OU
tStartA < tEndB && tEndB <= tEndA //Pour le cas 2
OU
tStartB < tStartA && tEndB > tEndA //Pour le cas 3
(Le cas 4 est pris en compte soit dans le cas 1, soit dans le cas 2)
Cela fonctionne, mais cela ne semble pas très efficace.
Alors, premièrement, y a-t-il une classe existante en c# qui peut modéliser ceci (une période de temps), quelque chose comme une timespan, mais avec une date de début fixe.
Deuxièmement : Y a-t-il déjà un code c# (comme dans la classe DateTime
) qui peut gérer cela?
Troisièmement : si ce n'est pas le cas, quelle serait votre approche pour rendre cette comparaison la plus rapide possible?
1 votes
La période (C) dans le cas 5 me perturbe. Est-ce que cela représente la situation de non chevauchement ? Si oui, ne faudrait-il pas diviser en deux, le cas 5 B entièrement avant A, le cas 6 A entièrement avant B ?
1 votes
Oui c'est non superposé.
0 votes
Il y a un cas 6 où les deux plages de dates sont identiques -- la réponse acceptée ne donne pas une réponse correcte pour ce cas - Si vous utilisez cette solution, vous voudrez peut-être penser à mettre à jour votre code !!
1 votes
@DanB Modifier en fait non, Si je vérifie, je pense que la solution couvre le cas : si
a.start
etb.start
sont égaux et de même pour la fin, vous avez :a.start < a.end && a.start < a.end
ce qui est vrai.0 votes
@J4N - Merci -- je le vois maintenant...
0 votes
Salut. Je sais que c'est un peu tard mais que faire si j'ai une liste de plages de dates stockées dans une base de données, Comment puis-je créer une instruction select qui identifiera si une date saisie par l'utilisateur chevauche mes données dans la base de données?
0 votes
L'algorithme Merge Overlapping Intervals peut donner quelques pistes.