Conversion de date

Pour formater une date en chaîne de caractère ou pour convertir une chaîne de caractère en date, on utilise la classe java.text.DateFormat ou sa sous-classe java.text.SimpleDateFormat.


SimpleDateFormat.parse

Dans une application, pour pouvoir faire les conversions, il est nécessaire d'imposer un format de saisie, qui correspond au pattern du SimpleDateFormat.

public class DateFormatUtil {
  
  private String dateFormat = "dd/MM/yyyy"
  
  public static Date parse(String dateSaisie) throws ParseException {
    if (dateSaisie != null) {
      SimpleDateFormat fmt = new SimpleDateFormat(dateFormat);
      Date d = fmt.parse(dateSaisie);
      return d;
    }
    return null;
  }
}

Multi-formats

Afin de rendre l'application plus conviviale, il faut donner une plus grande souplesse de saisie à l'utilisateur et supporter une série de patterns. Avant d'en appliquer un, il faut rechercher celui qui est adapté à la saisie, ce qui peut se faire avec des expressions régulières.

public class DateFormatUtil {
  
  private static Map<String , String> regexToDatePattern = new HashMap<String, String>();
  
  static {
    regexToDatePattern.put("(\\d{1})/(\\d{1})/(\\d{2})", "d/M/yy");
    regexToDatePattern.put("(\\d{2})/(\\d{2})/(\\d{4})", "dd/MM/yyyy");
    regexToDatePattern.put("(\\d{2})/(\\d{2})/(\\d{2})", "dd/MM/yy");
    regexToDatePattern.put("(\\d{1})/(\\d{2})/(\\d{2})", "d/MM/yy");
    regexToDatePattern.put("(\\d{2})/(\\d{1})/(\\d{2})", "dd/M/yy");
    regexToDatePattern.put("(\\d{1})/(\\d{1})/(\\d{4})", "d/M/yyyy");
    regexToDatePattern.put("(\\d{2})/(\\d{1})/(\\d{4})", "dd/M/yyyy");
    regexToDatePattern.put("(\\d{1})/(\\d{2})/(\\d{4})", "d/MM/yyyy");
  }
  
  public static Date parse(String dateSaisie) throws ParseException{
    if (dateSaisie != null) {
      for (Entry<String, String> entry : regexToDatePattern.entrySet()) {
        if (dateSaisie.matches(entry.getKey())) {
          SimpleDateFormat fmt = new SimpleDateFormat(entry.getValue());
          Date d = fmt.parse(dateSaisie);
          return d;
        }
      }
    }
    return null;
  }
}

Formats paramétrables

L'étape suivante, pour améliorer la souplesse, est de stocker les correspondances entre formats et patterns dans une stockage externe, comme par exemple un fichier de configuration XML ou properties.