Dans cette fiche...

<Retour>

Description de l'applet

Difficulté : Résultat
Question posée sur un newsgroup : comment réaliser un compte à rebours, par exemple entre aujourd'hui et le 1er janvier 2000 ?

On a compliqué la chose en passant la "date à atteindre" en paramètre. Pour plus de détails sur les paramètres, consultez cette page.

Votre navigateur n'est pas compatible Java !

Listing de l'applet

// --------------------------------------------------
// COMPTE A REBOURS
// --------------------------------------------------
import java.applet.*;
import java.awt.*;
import java.util.Date;
public class CompteARebours extends Applet
{
	// Les dates
	Date bientot;
	Date aujourdhui = new Date();
	// La différence des 2 dates
	long diff;
	// Initialisation	
	public void init()
	{
		String s, s1, s2, s3;
		// Couleur de fond
		setBackground(Color.black);
		// Date à atteindre (passée en paramètre à l'applet)
		s = getParameter("DATE");
		s1 = s.substring(0, 2);
		s2 = s.substring(3, 5);
		s3 = s.substring(6, 10);
		bientot = new Date(Integer.parseInt(s3)-1900, 
				   Integer.parseInt(s2)-1, 
				   Integer.parseInt(s1), 23, 59, 59);
		// Différence des 2 dates
		diff = bientot.getTime() - aujourdhui.getTime();
	}
	// Affichage
	public void paint(Graphics g)
	{
		g.setColor(Color.white);
		g.drawString("" + diff/1000/60/60/24, 10, 15);
		g.setColor(Color.orange);
		g.drawString("" + aujourdhui.getTime(), 10, 30);
		g.drawString("" + bientot.getTime(), 10, 45);
	}
}

Le listing en détail...

Les lignes non commentées ont déjà été traitées dans les exemples précédents.

import java.util.Date;
Pour pouvoir utiliser l'objet Date, il faut importer le package correspondant.
On aurait pu également écrire : import java.util.*;
 
Date bientot;
Date aujourdhui = new Date();
On déclare 2 objets Date, et la date du jour est lue directement. La date à atteindre (bientot) sera lue plus loin dans les paramètres de l'applet.
 
long diff;
Une petite variable qui nous servira plus loin à calculer la différence entre les 2 dates, en millisecondes (quelle précision !)
 
s = getParameter("DATE");
s1 = s.substring(0, 2);
s2 = s.substring(3, 5);
s3 = s.substring(6, 10);
On lit le paramètre DATE, qui doit figurer dans la page HTML (voir plus bas), sous la forme jj/mm/aaaa.
On découpe ensuite cette valeur en 3 chaînes séparées, grâce à la méthode substring(), qui est détaillée ici.
 
bientot = new Date(Integer.parseInt(s3)-1900, 
		   Integer.parseInt(s2)-1, 
		   Integer.parseInt(s1), 23, 59, 59);
On peut maintenant créer un objet Date, de la façon suivante :

bientot = new Date(annee, mois, jour)

Ne pas oublier :

  • s1, s2 et s3 sont des chaînes de caractères, qu'il faut donc convertir en entiers au préalable.
    D'où le Integer.parseInt(s3) par exemple. Pour plus de détails, voyez la fiche intitulée "Lecture de paramètres depuis l'applet")
  • dans une date, l'année représente en réalité le nombre d'années écoulées depuis le début du siècle. Or s3 donne 1998. Il faut donc lui retrancher 1900.
  • les mois sont numérotés de 0 (Janvier) à 11 (Décembre). D'où le Integer.parseInt(s2)-1.
  • On a pris le parti de se placer en plus à la fin de la journée, soit 23:59:59, ce qui explique les 2 derniers paramètres.
 
diff = bientot.getTime() - aujourdhui.getTime()
L'objet Date dispose d'une méthode sur laquelle repose tout notre programme : la méthode getTime().
Le problème : cette méthode donne le nombre de millisecondes écoulées entre le début de l'époque et la date concernée (sachant que le début de l'époque est le 1er janvier 1970).

En calculant la différence entre les 2 dates, on obtient donc le nombre de millisecondes entre les 2 dates. Reste à convertir ce nombre en jours pour une meilleure lecture.

 
g.drawString("" + diff/1000/60/60/24, 10, 15)
C'est ici qu'on transforme la différence de millisecondes en jours. La division est volontairement détaillée, de façon à montrer le passage en secondes, puis en minutes, puis en heures, et enfin en jours. Ouf !

Les 2 lignes suivantes sont accessoires : elles permettent simplement d'afficher chaque durée en millisecondes, pour information.

Intégration de l'applet dans la page

Voici le code qui a été utilisé dans cette page HTML pour faire apparaître l'applet :

<applet code="CompteARebours.class" width=250 height=90>
<param name="DATE" value="01/01/2000">
Votre navigateur n'est pas compatible Java !
</applet>

Pour plus de précisions sur l'intégration d'une applet, cliquez ici.