java code

Convertir une date du calendrier républicain français

Récemment au travail, je me suis retrouvé face à la difficulté suivante : je devais extraire des dates de titres de documents afin de les stocker dans un index. Or, certaines d’entre elles étaient des dates issues du calendrier républicain français! Comme il n’existe pas à l’heure actuelle de classe dans l’api java capable de prendre en charge ce type de dates, il m’a fallu chercher un moyen de les convertir en calculant leur équivalent en date du calendrier grégorien.

J’ai donc effectué quelques recherches sur Internet pour trouver des convertisseurs et étudier leur fonctionnement. En me basant sur un morceau de code javascript, j’ai écrit une classe Java capable de faire la conversion. Cette classe prend en entrée une date du  calendrier républicain au format String et peut ressortir son équivalent grégorien aux formats String, Date ou long ! Cette classe utilise trois énumérations ainsi que des patterns qui permettent de catcher le mois et l’année de la date républicaine (en prenant en compte les majuscules au début du nom du mois ainsi que les accents).

La méthode convertAsString prend en second paramètre un pattern au format String également. Ce pattern est utilisé avec un objet SimpleDateFormat pour retourner la date au format désiré.

	public String convertAsString(String republicanDate, String pattern) {

		String dateString = null;

		matcher = PATTERN_REPUBLICAN_DATE.matcher(republicanDate);
		if (matcher.find()) {
			dateString = matcher.group(0);
		}

		if (dateString != null) {
			dateString = convertRepublicanToGregorian(dateString);
			Date date = getDate(dateString);

			if (date != null) {
				SimpleDateFormat format = new SimpleDateFormat(pattern);
				dateString = format.format(date);

			} else {
				System.out.println("Failed to parse date : " + dateString
						+ " from " + republicanDate + ".");
			}
		} else {
			System.out
					.println("Failed to extract date from: " + republicanDate);
		}

		return dateString;
	}

L’énumération RepublicanMonths :

public enum RepublicanMonths {

	VENDEMIAIRE("[V|v]end[é|e]miaire", 0),
	BRUMAIRE("[B|b]rumaire", 1),
	FRIMAIRE("[F|f]rimaire", 2),
	NIVOSE("[N|n]iv[ô|o]se", 3),
	PLUVIOSE("[P|p]luvi[ô|o]se", 4),
	VENTOSE("[V|v]ent[ô|o]se", 5),
	GERMINAL("[G|g]erminal", 6),
	FLOREAL("[F|f]lor[é|e]al", 7),
	PRAIRIAL("[P|p]rairial", 8),
	MESSIDOR("[M|m]essidor", 9),
	THERMIDOR("[T|t]hermidor", 10),
	FRUCTIDOR("[F|f]ructidor", 11)
	;

	private String month;
	private int index;

	public String getMonth() {
		return this.month;
	}

	public int getIndex() {
		return this.index;
	}

	RepublicanMonths(String month, int index) {
		this.month = month;
		this.index = index;
	}

}

Et un petit exemple du fonctionnement de cette classe RepublicanCalendarDateConverter :


public static void main(String[] args) {

String republican = "5 vendémiaire an VI";
RepublicanCalendarDateConverter converter = RepublicanCalendarDateConverter.getConverter();
String dateString = converter.convertAsString(republican, "dd/MM/yyyy");
Date date = converter.convertAsDate(republican);
long dateLong = converter.convertAsLong(republican);

System.out.println(republican + " was converted to " + dateString);
System.out.println(republican + " was converted to " + date);
System.out.println(republican + " was converted to " + dateLong);
 }

qui donne le résultat suivant :


5 vendémiaire an VI was converted to 26/09/1797
5 vendémiaire an VI was converted to Tue Sep 26 00:00:00 CET 1797
5 vendémiaire an VI was converted to -5436118800000

Vous pouvez télécharger librement l’archive jar ainsi que les sources :)

4 Comments

  1. Bonjour

    tres interessant

    aurais tu la même chose pour convertir une date du calendrier grégorien (francais) au calendrier hébraique et musulman ?

    Merci d’avance

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *