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.
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");
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());