Java: Création et manipulation des dates

 

La classe TestDate suivante illustre l'utilisation des dates en Java. L'objet java.util.Date représente la valeur d'une date. La valeur d'une date est indépendante de sa représentation. Pour représenter une date, on a besoin d'un objet java.text.DateFormat qui permet notamment :
  • d'analyser une chaine de caractère dans un certain format de date afin d'en faire un objet Date
  • d'afficher une date dans ce meme format 
Enfin, le calcul sur les dates (exemple : ajout/suppression de jours/mois/années) est relatif à un certain calendrier représenté par un objet java.util.Calendar. Il permet en particulier de s'affranchir du traitement des cas de mois à 31, 30, 29, ou 28 jours.
 
import java.util.*;
import java.text.*;
import java.io.*;
 
class TestDate {
    
    private Date dateCourante;
    public static DateFormat dfsf;
    public static DateFormat dfmf;
    public static DateFormat dfsu;
 
    static {
      dfsf = DateFormat.getDateInstance(DateFormat.SHORT, Locale.FRANCE);
      dfmf = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.FRANCE);
      dfsu = DateFormat.getDateInstance(DateFormat.SHORT, Locale.US);
    }
 
    {
      dateCourante = new Date();
    }
 
    public void setDate(DateFormat df, String prompt) {
      Date d=null;
      boolean dOk=false;
      BufferedReader entree = new BufferedReader(new InputStreamReader(System.in));
      while (!dOk) {
        try {
          System.out.print(prompt);
          dateCourante = df.parse(entree.readLine());
          dOk=true;
         } catch (IOException e) {
          System.err.println("Erreur d'entrée/sortie clavier");
         } catch(ParseException e) {
          System.err.println("Format de date incorrect");
         }
       }
    }
 
    public void decaleDate (int i) {
      // passage par Calendar pour faire le calcul
      Calendar calendrier = new GregorianCalendar();
      calendrier.setTime(dateCourante);
      calendrier.add(Calendar.DATE, i);
      dateCourante = calendrier.getTime();
    }
 
    public String toString() {
      StringBuffer sb = new StringBuffer();
      sb.append("Date courante : "+dateCourante);
      sb.append("\nDate courante parsee S/FR : "+dfsf.format(dateCourante));
      sb.append("\nDate courante parsee M/FR : "+dfmf.format(dateCourante));
      sb.append("\nDate courante parsee S/US : "+dfsu.format(dateCourante));
      sb.append("\n---------------------------");
      return sb.toString();
    }
 
    public static void main(String[] args) {
      TestDate td = new TestDate();
      System.out.println(td);
 
      td.setDate(dfsf, "Nouvelle date (format JJ/MM/AAAA) : ");
      System.out.println(td);
 
      td.setDate(dfmf, "Nouvelle date (en toute lettre) : ");
      System.out.println(td);
 
      td.decaleDate(Util.lireEntier("Declage de la date : "));
      System.out.println(td);
    }
}
 
 
Remarque : ne pas confondre java.util.Date et java.sql.Date utilisé dans JDBC.