Comparer des heures

cs_piep14 Messages postés 345 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 13 mai 2011 - 5 juin 2005 à 21:17
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 9 juin 2005 à 19:40
Bonjour a tous, voici mon problème :



Je souhaite comparer deux dates au format : YYYY-MM-JJ HH:MM:SS



Si la date actuelle est égale a la date saisie, afficher un message !!!



Pour récupérer la date du système, je fais :

private void Principal_Load(object sender, System.EventArgs e)

{

Principal formtest = new Principal();



Rectangle rec = new Rectangle();

rec = Screen.GetWorkingArea(rec);

int x = rec.Width;

int largeur = formtest.Size.Width;



timer1 = new Timer();

timer1.Enabled = true;

timer1.Interval = 1000;

this.timer1.Tick += new System.EventHandler(this.timer1_Tick);





}



private void timer1_Tick(object sender, System.EventArgs e)

{

labHeure.Text = DateTime.Now.ToString("HH:mm:ss");

labDate.Text = DateTime.Now.ToString("dd-MM-yyyy");

}



J'espère avoir été assez clair. Merci et bon dimanche :)
A voir également:

24 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
5 juin 2005 à 22:12
Salut,

Si j'ai bien suivi :
string dt1 = DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss");
string dt2 = labDate.Text + labHeure.Text;
if ( dt2 == dt1 )
{
// affichage
}

PS : perso je remplacerais
labHeure.Text = DateTime.Now.ToString("HH:mm:ss");
labDate.Text = DateTime.Now.ToString("dd-MM-yyyy");
par
DateTime dt = DateTime.Now;
labHeure.Text = dt.ToString("HH:mm:ss");
labDate.Text = dt.ToString("dd-MM-yyyy");

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
5 juin 2005 à 23:02
Salut, la structure DateTime supporte l'operateur d'egalité donc y'a pas plus simple pour comparer deux dates.. Et il est plus performant de comparer deux dates plutot que leurs representations sous forme de chaine de caracteres.. Et comme le dit Coq il est preferable d'eviter le double appel a DateTime.Now dans ton timer..
0
cs_piep14 Messages postés 345 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 13 mai 2011
5 juin 2005 à 23:28
Oui j'ai vu qu'il y avait la méthod Equal je crois mais je n'arrive pas
a l'utiliser. Pourrais tu me faire un ptit exemple stp !!!

Merci de votre aide
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
5 juin 2005 à 23:32
l'utilisation de l'opérateur == est suffisante
if (dt1 == dt2 ) (avec dt1 et dt2 deux instances de DateTime)

Cocoricoooooooo !!!!
coq
MVP Visual C#
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
5 juin 2005 à 23:34
A noter que les millisecondes seront elles aussi prisent en compte dans la comparaison.

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
6 juin 2005 à 05:49
Piep, et bien pourquoi tu n'arrives pas l'utiliser, c'est une methode comme une autre..

// L'operateur d'egalité

if ( dt1 == dt2 )
{
// Equal
}

// La methode membre

if ( dt1.Equals( dt2 ) )
{
// Equal
}

// La methode static

if ( DateTime.Equals( dt1, dt2 ) )
{
// Equal
}

// La methode compliquée

if ( dt1.Ticks == dt2.Ticks )
{
// Equal
}
0
cs_yoannd Messages postés 305 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 août 2011 7
6 juin 2005 à 13:26
Pour comparer deux dates, il y a effectivement l'opérateur =, mais
celui-ci prend en compte, comme coq l'a dit, les millisecondes. Pour
comparer deux dates au niveau "jour", il faut faire date1.date ==
date2.date



Si après tu veux un niveau de comparaison à la minutes, je crois que tu
dois passer par (date1.date date2.date) && (date1.hour
date2.hour) && (date1.minute == date2.minute)



En résumé, une fois ton texte entré dans ta textBox (ou MaskedTextBox ?), tu fais :





if(System.Convert.ToDateTime(ChampTexteDate.Text).Date == System.DateTime.Now.Date){

Affichage();

}

est-ce que tu penses que ceci peut s'adapter à ton cas ?



^^
0
cs_piep14 Messages postés 345 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 13 mai 2011
6 juin 2005 à 17:25
J'ai donc essayé comme ci, mais la fenetre ne se lance pas a l'heure indiquée :



private void Principal_Load(object sender, System.EventArgs e)

{

Principal formtest = new Principal();



Rectangle rec = new Rectangle();

rec = Screen.GetWorkingArea(rec);

int x = rec.Width;

int largeur = formtest.Size.Width;



timer1 = new Timer();

timer1.Enabled = true;

timer1.Interval = 1000;

this.timer1.Tick += new System.EventHandler(this.timer1_Tick);

string dt1 = DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss");

string dt2 = "06-06-2005 17:26:00";



if ( dt2 == dt1 )

{


vbMaf.Windows.Forms.DesktopAlert da = new
vbMaf.Windows.Forms.DesktopAlert();

da.Show();

}



}



private void timer1_Tick(object sender, System.EventArgs e)

{

DateTime dt = DateTime.Now;

labHeure.Text = dt.ToString("HH:mm:ss");

labDate.Text = dt.ToString("dd-MM-yyyy");

}



Merci
0
cs_yoannd Messages postés 305 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 août 2011 7
6 juin 2005 à 17:50
Ben je pense que c'est normal. Ton timer est pas fait pour lancer ta fenêtre ?



Ce qui se passe ici, c'est que tu regardes une seule fois si c'est
l'heure de lancer ton appli... Si tu lances ton prog principal à 17:20,
il fait une vérification à 17:20, et puis basta, il revérifie plus
après... je pense que ce que tu as voulu mettre, c'est plutot ça :



private void Principal_Load(object sender, System.EventArgs e)

{

Principal formtest = new Principal();



timer1 = new Timer();

timer1.Enabled = true;

timer1.Interval = 1000;

this.timer1.Tick += new System.EventHandler(this.timer1_Tick);



}



private void timer1_Tick(object sender, System.EventArgs e)

{

DateTime dt = DateTime.Now;

labHeure.Text = dt.ToString("HH:mm:ss");

labDate.Text = dt.ToString("dd-MM-yyyy");



string dt1 = DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss");


string dt2 = "06-06-2005 17:26:00";





if ( dt2 == dt1 )


{


vbMaf.Windows.Forms.DesktopAlert da = new
vbMaf.Windows.Forms.DesktopAlert();


da.Show();


}

}

D'autre part, je ne pense pas que ce code soit totallement stable... je
m'explique. Si ton PC rame un bon coup, mettons entre 17:26:59 et
17:26:01, alors ton timer va être ralenti et il va sauter la bonne
seconde... Donc ton a.Show(); ne sera pas effectué... Je pense donc que
faire une comparaison jusqu'à la seconde dans le cas présent n'est pas
une bonne idée...



Enfin attends quelques minutes, je vais faire un petit truc pour toi...
0
cs_piep14 Messages postés 345 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 13 mai 2011
6 juin 2005 à 18:15
Depuis que j'ai fais la méthode que tu indiques précédemment, je ne peux plus quitter ma fenetre qui s'est lancé

Etrange tout ca !!! ;)
0
cs_yoannd Messages postés 305 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 août 2011 7
6 juin 2005 à 18:28
Tu peux plus quitter ou elle se relance directement après que tu l'aies fermée ?



Autre truc : tu utilises quoi comme version du FrameWork ?
0
cs_piep14 Messages postés 345 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 13 mai 2011
6 juin 2005 à 18:30
Nan, je ne peux plus quitter la fenêtre. Normalement, elle se ferme
toute seule après X secondes ou par un bouton et la ni l'une ni l'autre
des facons ne fonctionne.



Version : Microsoft .NET Framework SDK v1.1



Merci cher ami
0
cs_yoannd Messages postés 305 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 août 2011 7
6 juin 2005 à 18:39
Je crois que j'ai une piste... En fait, ta fenetre, essaye de l'ouvrir avec ShowDialog plutot que Show()... juste pour voir...
0
cs_piep14 Messages postés 345 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 13 mai 2011
6 juin 2005 à 18:42
nan, c'est pareil, l'application plante meme j'ai l'impression !!! As tu eut mon message pv ?
0
cs_yoannd Messages postés 305 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 août 2011 7
6 juin 2005 à 18:44
Sinon, je viens de faire un composant, mais je doute que tu puisses
l'utiliser, c'est un truc fait à l'arrache avec le framework 2.0 beta
2. Il permet de lancer un tâche à une heure précise.





Le concept est simple, plutot que de toujours regarder l'heure avec un
timer, je fais un thread, et je lui dit de "s'endormir" quelques
secondes, le temps d'arriver à la bonne heure. En gros, je créé un
objet TimeSpan que j'initialise avec un l'heure ou je dois lancer le
truc - l'heure actuelle. Je après le thread, je fais un sleep d'un
durée équivalente à mon time span. et juste après le sleep, je lance un
évènement qui peut être récupéré, et qui est lancé pile poil à l'heure
souhaitée...








Je peux te passer le code si tu veux.
0
cs_yoannd Messages postés 305 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 août 2011 7
6 juin 2005 à 18:45
Je viens de répondre à ton message pv ^^...
0
cs_yoannd Messages postés 305 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 août 2011 7
6 juin 2005 à 19:00
Je crois que j'ai ta solution... C'est plus simple que précédement, et
ca permet de ne pas sortir la massue pour écraser la fourmi ^^





private void Form1_Load(object sender, EventArgs e) {

// On va dire que l'on lance le truc 2 minutes après son lancement...

DateTime DateLancement = DateTime.Now.AddMinutes(2);

// On calcule la durée qui nous sépare de maintenant à DateLancement...

TimeSpan span
= new TimeSpan(DateLancement.Subtract(DateTime.Now).Ticks);

// On dit au
timer de réagir dans n millisecondes, ce qui correspond au temps entre

// maintenant et dans 2 minutes...

this.timer1.Interval = (int) span.TotalMilliseconds;

// On active le timer...

this.timer1.Enabled = true;

}



private void timer1_Tick(object sender, EventArgs e) {

// On
désactive le timer (sinon ce truc va se lancer toutes les 2 minutes)...

timer1.Enabled = false;

// C'est ici que tu fais ton Show();

MessageBox.Show("test");

}
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
7 juin 2005 à 08:42
Piep, peut etre que ce code correspond à ce que tu veux faire:

protected override void OnLoad( EventArgs args )
{
base.OnLoad( args );

alert = new DateTime( 2005, 6, 7, 8, 30, 0 );
activate = true;

timer = new Timer( );
timer.Interval = 1000;
timer.Tick += new EventHandler( Timer_Tick );
timer.Start( );
}

private void Timer_Tick( object sd, EventArgs args )
{
DateTime now = DateTime.Now;

if ( activate && now >= alert )
{
activate = false;
MessageBox.Show( this, now.ToString( ), "Alerte", MessageBoxButtons.OK, MessageBoxIcon.Warning );
}

labDate.Text = now.ToShortDateString( );
labTime.Text = now.ToLongTimeString( );
}
0
cs_yoannd Messages postés 305 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 août 2011 7
7 juin 2005 à 13:30
Pas la peine d'aider Piep,



J'ai essayé de l'aider hier soir par MSN pendant 1h et demi, et le
gars, une fois qu'il a eu son info, il a même pas eu la descence de
dire ni merci ni merde, il s'est tout bonnement déconnecté (ou il m'a
bloqué). Comme on dit, fait du bien à Martin, il te chie dans la main !
Ca sert à rien d'aider des gens comme ca...
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
7 juin 2005 à 16:27
Pas cool !
0
Rejoignez-nous