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