Dans cette fiche... |
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. |
// -------------------------------------------------- // 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); } }
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 :
Ne pas oublier :
|
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. |
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.