Le but de mon code est de vous permettre d’avoir une visibilité sur les jours de vacances en France dans vos applications et surtout l’utilisation d’un référentiel des jours fériés qui est Google Calendar.
Pour cela, nous allons récupérer à travers le service de google un fichier au format ICS contenant la liste des événements tout au long de l’année courante.
Après une petite recherche sur google, nous arrivons sur le projet iCal4j offrant une petite bibliothèque capable de nous aider à exploiter les fichiers ICS.
Pour l’utilisation de cette Bibliothèque, nous l’avons ajouté dans nos dépendances maven à travers le code suivant :
-
<dependency>
-
<groupId>org.mnode.ical4j</groupId>
-
<artifactId>ical4j</artifactId>
-
<version>1.0.2</version>
-
</dependency>
Par la suite cette petite application en guise de démonstration.
-
package com.nihed;
-
-
import java.io.InputStream;
-
import java.net.URL;
-
import java.text.SimpleDateFormat;
-
import java.util.Date;
-
import java.util.Iterator;
-
import net.fortuna.ical4j.data.CalendarBuilder;
-
import net.fortuna.ical4j.model.Calendar;
-
import net.fortuna.ical4j.model.Component;
-
import net.fortuna.ical4j.model.Property;
-
-
/**
-
* @author Nihed MBAREK
-
* @version 0.1
-
*
-
*/
-
public class App {
-
-
//Initialisation des constantes
-
public static final String DATE_BEGIN =
"20120101";
-
public static final String DATE_END =
"20121231";
-
public static final String DD_MM_YYYY =
"dd/MM/yyyy";
-
public static final String DTSTART =
"DTSTART";
-
public static final String GOOGLE_URL =
"https://www.google.com/"
-
+ "calendar/ical/"
-
+ "fr.french%23holiday%40group.v.calendar.google.com"
-
+ "/public/basic.ics";
-
public static final String SUMMARY =
"SUMMARY";
-
public static final String pattern =
"yyyyMMdd";
-
-
public static void main
(String[] args
) {
-
try {
-
//Init
-
-
-
-
//Mise en place du stream pour la récupération du fichier ICS
-
-
CalendarBuilder builder = new CalendarBuilder();
-
//Consommation du Stream et remplissage de l’objet calendar
-
Calendar calendar = builder.
build(stream
);
-
//Parcour du calendar pour récuperer les évenements
-
for (Iterator it = calendar.
getComponents().
iterator(); it.
hasNext();
) {
-
-
//Récupération de la date de l’evènement
-
//à travers la propriété DTSTART
-
final String dtStartValue = component.
getProperty(DTSTART
).
getValue();
-
//Récupération du déscriptif de l’evènement
-
//à travers la propriété SUMMARY
-
final String summaryValue = component.
getProperty(SUMMARY
).
getValue();
-
-
//Test si la date est bien dans notre interval
-
if (dateEvent.after(dateEnd) || dateEvent.before(dateBegin)) {
-
continue;
-
}
-
//Converstion de la date dans un format plus convivial
-
-
//Affichage de notre message
-
System.
out.
println(summaryValue +
" tombe le " + dateStartValue +
"\n");
-
}
-
-
-
ex.printStackTrace();
-
}
-
}
-
}
-
J’espère que le code est clair, sinon je suis disponible pour répondre à vos commentaires.