/**
* 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