Gérer les dates

Les composants de base de Java sont vraiment peu pratiques : le cas le plus symptomatique est la gestion des mois, qui sont numérotés de... 0 à 11.

J'ai donc préféré utiliser les composants fournis dans l'API Joda-time : http://www.joda.org/joda-time/, qui offre de nombreuses fonctions très simples à comprendre et d'usage.

Utiliser l'API Joda-time

Quelques exemples d'utilisation :

L'ensemble des imports :

import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.Duration;
import org.joda.time.Interval;
import org.joda.time.LocalDate;

Initialisation à partir du date existante :

DateTime dt = new DateTime(maDate.getTime());

Comparer la durée à partir de deux dates :

Interval interval = new Interval(debutDateTime, finDateTime);
Duration min = Duration.parse("PT120.0S");
Duration max = Duration.parse("PT480.0S");
Duration intervalD = interval.toDuration();
dureeMinute = (int) interval.toDuration().getStandardMinutes();
if (intervalD.isShorterThan(min)
        || intervalD.isLongerThan(max)) {
            [...]
        } else
            [...]
        }

Réécrire une date au format date :

Date maDate = maDateTime.toDate();

Formater une date en affichage (ici, la génération d'un nom de fichier avec la date / heure :

DateTime dt = new DateTime();
        String fmt = "%02d";
        File f = new File("export_" + dt.getYear() + "-"
                + String.format(fmt, dt.getMonthOfYear()) + "-"
                + String.format(fmt, dt.getDayOfMonth()) + "-"
                + String.format(fmt, dt.getHourOfDay())
                + String.format(fmt, dt.getMinuteOfHour()) + ".xml");

Utiliser un composant de sélection de date : JXDatePicker

Ce composant est fourni dans l'API SWINGX (https://swingx.java.net/). J'ai rajouté un fonctionnement qui affiche le panneau de sélection des dates dès que l'on clique dans la zone de saisie de la date (script trouvé dans le net) :

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Date;
import java.util.Locale;
import org.jdesktop.swingx.JXDatePicker;
import org.jdesktop.swingx.plaf.basic.BasicDatePickerUI;
/**
 * @author quinton
 *
 */
@SuppressWarnings("serial")
public class DatePicker extends JXDatePicker {
    Object obj;
    DatePicker() {
        super();
        setDisplayPanelAll();
       
    }
    DatePicker (Date selected) {
        super(selected);
        setDisplayPanelAll();
    }
   
    DatePicker(Date selection, Locale locale) {
        super(selection, locale);
        setDisplayPanelAll();
    }
   
    /**
     * Affiche le paneau de sélection de la date au clic de souris
     */
    private void setDisplayPanelAll() {
        obj = this;
        this.getEditor().addMouseListener(new MouseListener() {
            public void mouseClicked(MouseEvent me) {
                BasicDatePickerUI date_ui = ((BasicDatePickerUI) ((JXDatePicker) obj)
                        .getUI());
                date_ui.toggleShowPopup();
            }
            public void mouseEntered(MouseEvent me) {
            }
            public void mouseExited(MouseEvent me) {
            }
            public void mouseReleased(MouseEvent me) {
            }
            public void mousePressed(MouseEvent me) {
            }
        });
    }
}

Il s'utilise alors ainsi :

maDate = new DatePicker (new Date());