/** * Classe permettant de construire une date formée d'une année, d'un mois et d'un jour. * Les mois seront representés par les nombres 1, 2, ..., 12 correspondant respectivement à janvier, * février, mars, ..., décembre. * * * */ public class Date { private int annee; private int mois; private int jour; /** * Construit une Date avec l'année 0, le mois 1 et le jour 1. */ public Date () { // constructeur annee = 0; mois = 1; jour = 1; } // Date /** * Construit une Date avec annee, mois et jour. * Si (annee, mois, jour) ne constitue pas une date valide, (0, 1, 1) sera la date construite. * @param annee l'annee * @param mois le mois * @param jour le jour */ public Date ( int annee, int mois, int jour ) { // constructeur this(); if ( estValide ( annee, mois, jour ) ) { this.annee = annee; this.mois = mois; this.jour = jour; } } // Date /** * Retourne true ou false selon que l'annee, le mois et le jour constituent une date valide, false sinon. * @param annee l'annee * @param mois le mois * @param jour le jour * @return true si et seulement si l'annee, le mois et le jour constituent une date valide, false sinon. */ public static boolean estValide ( int annee, int mois, int jour ) { return mois >= 1 && mois <= 12 && jour > 0 && jour <= nbJoursMois ( mois, annee ); } // /** * Retourne une copie de la Date. * @return une copie de la Date. */ public Date copie () { return new Date ( this.annee, this.mois, this.jour ); } // copie /** * Retourne la chaîne de caractere correspondant à la Date sous la forme aaaa/mm/jj. * @return la chaîne de caractere correspondant à la Date sous la forme aaaa/mm/jj. */ public String toString () { String s = String.valueOf ( this.annee ) + '/'; if ( mois < 10 ) { s = s + '0'; } s = s + String.valueOf ( this.mois ) + '/'; if ( jour < 10 ) { s = s + '0'; } s = s + String.valueOf ( this.jour ); return s; } // toString /** * Retourne true si et seulement si cette Date est la meme année, le même mois et le même jour que l'argument, false sinon. * @param d la Date a comparer avec cette Date * @return true si et seulement si cette Date est la meme année, le même mois et le même jour que l'argument, false sinon. */ public boolean estEgale ( Date d ) { return annee == d.annee && mois == d.mois && jour == d.jour; } // estEgale /** * Retourne true si et seulement si cette Date est antérieure à l'argument, false sinon. * @param d la Date à comparer avec cette Date * @return true si et seulement si cette Date est antérieure à l'argument, false sinon. */ public boolean plusPetite ( Date d ) { boolean reponse; if ( this.annee != d.annee ) { reponse = this.annee < d.annee; } else if ( this.mois != d.mois ) { reponse = this.mois < d.mois; } else { reponse = this.jour < d.jour; } return reponse; } // plusPetite /** * Retourne le nom du mois sous forme de chaîne de caractères. Si le mois est invalide, retourne la chaîne "inconnu". * @param moi le mois * @return le nom du mois sous forme de chaîne de caractères. Si le mois est invalide, retourne la chaîne "inconnu". */ public static String nomDuMois ( int mois ) { final String[] noms = { "janvier", "fevrier", "mars", "avril", "mai", "juin", "juillet", "aout", "septembre", "octobre", "novembre", "decembre" }; return noms[ mois - 1 ]; } // nomDuMois /** * Retourne true si et seulement si l'argument représente une année bissextile, false sinon. * @param annee l'année à vérifier * @return true si et seulement si l'argument représente une année bissextile, false sinon. */ public static boolean estBissextile ( int annee ) { return annee % 4 == 0 && annee % 100 != 0 || annee % 400 == 0; } // estBissextile /** * Retourne le nombre de jours du mois, en fonction de l'année pour prendre en compte les années bissextile pour le mois de février. * @param mois le mois * @param annee l'annee * @return le nombre de jours du mois, en fonction de l'année pour prendre en compte les années bissextile pour le mois de février. */ public static int nbJoursMois ( int mois, int annee ) { int reponse = 0; if ( mois == 1 || mois == 3 || mois == 5 || mois == 7 || mois == 8 || mois == 10 || mois == 12 ) { reponse = 31; } else if ( mois == 4 || mois == 6 || mois == 9 || mois == 11 ) { reponse = 30; } else if ( mois == 2 ) { if ( estBissextile ( annee ) ) { reponse = 29; } else { reponse = 28; } } return reponse; } // nbJoursMois } // Date