Problème de logique

Cyriusix Messages postés 11 Date d'inscription lundi 23 avril 2007 Statut Membre Dernière intervention 3 mai 2007 - 3 mai 2007 à 13:01
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 - 3 mai 2007 à 14:58
Bonjour à tous,


Je suis en train de m'arracher les cheveux sur la réalisation d'une
méthode qui doit aller chercher des infos situés entre des dates heure.


Donc pour ce faire, je fais un test qui test la date:

if ((iJour >= 22 && iMois >= 12 && iAnnee >=
2006) && (iJour <= 23 && iMois <= 12 &&
iAnnee <= 2006))


et à l'interieur de ce test, il devrait y en avoir un autre pour tester
les heures.. mais mon problème est qu si l'heure de début est plus
grande que l'heure de fin, ca ne doit être valide que si la date de
début est plus petite que la date de fin. (je sais pas si je suis clair)

Une idée??


Et y aurait-il une manière plus propre de réaliser cela en utilisant
une valeur dateTime, afin que je n'aie pas besoin de séparer
iJour,iMois,iAnnee et iHeure,iMinute en sachant que c'est un utilisateur qui devra rentrer les dates et heures qui seront employé?


Merci bien.

4 réponses

leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
3 mai 2007 à 13:06
si tu as juste un probleme de saisie, deja utilise un datetimepicker. Ca te permet davoir en entrée un datetime valide correctement formaté, et saisi de manière plus agréable que des textbox (ou autres).

Deuxiemement, vu que tu auras un datetime, tu pourras comparer tout simplement
DateTime1.DayOfYear avec DateTime2.DayOfYear
et DateTime1.TimeOfDay avec DateTime2.TimeOfDay

ce qui t'évite toutes les questions que tu peux avoir a te poser
0
Cyriusix Messages postés 11 Date d'inscription lundi 23 avril 2007 Statut Membre Dernière intervention 3 mai 2007
3 mai 2007 à 13:24
Ca a l'air sympat effectivement.. mais comment l'utilise-t-on? t'aurais pas juste un exemple stp?

Dis moi si j'abuse..

Mais merci déja beaucoup.
0
cs__Syl_ Messages postés 66 Date d'inscription vendredi 20 octobre 2006 Statut Membre Dernière intervention 25 février 2008 2
3 mai 2007 à 14:53
Bonjour, ce que leprov te propose c'est d'ajouter un composant datetimepicker pour la saisie des dates (c'est un composant proposé par visual (qui se présente sous la forme d'un calendrier), comme un label, un bouton, une textbox, etc.)
Si toutefois les dates que tu veux comparer ne sont pas saisies par un utilisateur tu peux instancier des DateTime.

Si tu passes par une saisie rajoute à ta form deux datetimepicker  (dateTimePickerDateDebut,dateTimePickerDateFin)et autant de combobox que nécessaire (4 si tu t'arrêtes aux minutes, 6 si tu t'arrêtes au secondes) :

DateTime DateDeDebut = dateTimePickerDateDebut.Value;

DateTime DateDeFin = dateTimePickerDateFin.Value;

DateTime HeureDeDebut = new DateTime(1, 1, 1, Convert.ToInt32(comboBoxHeureDebut.Text), Convert.ToInt32(comboBoxMinuteDebut.Text), Convert.ToInt32(comboBoxSecondeDebut.Text));

DateTime HeureDeFin = new DateTime(1, 1, 1, Convert.ToInt32(comboBoxHeureFin.Text), Convert.ToInt32(comboBoxMinuteFin.Text), Convert.ToInt32(comboBoxSecondeFin.Text));

if (HeureDeDebut > HeureDeFin && DateDeDebut < DateDeFin)
  {
        //valide
  }
else
 {
        //pas valide
 }  

Si tu ne passes pas par une saisie surcharge le constructeur de DateTime pour créer ta date (ici c'est ce qui est fait pour les heures, en fait les "1,1,1" correspondent à la date 01/01/01, ce qui permet de ne comparer que l'heure ensuite)

Bon courage

_Syl_
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
3 mai 2007 à 14:58
et pourquoi ne pas faire tout simplement :

DateTime date1 = new DateTime(2006,12,22,0,0,0);
DateTime date2 = new DateTime(2006,12,23,23,59,59);

DateTime date3 = une date quelconque;

if (date1 <= date3 && date3 <= date2) {
   ... bla bla ...
}

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
Rejoignez-nous