Java – Création d'une liste de semaine
Le 18/10/2013 Par Jérôme Poussineaujava calendarliste de semaine
La classe Calendar de JavaLangage de développement très populaire ! s’avère bien utilie pour pouvoir manipuler des dates.
Ainsi, par exemple si vous souhaitez créer une liste de semaine vous pouvez vous y prendre de la sorte :
// Avec en paramètre le Nombre de semaine à afficher avant et après
public List
// Calcul d’une liste de semaines
List
SemaineDTO lSemaineDTO = null;
// Récupération des semaines avant
if (pNombreSemaineAvant > 0) {
pCalendar.add(Calendar.WEEK_OF_YEAR, (0 – pNombreSemaineAvant));
lSemaineDTO = this.getSemaineByDate(pCalendar, pLocale, pContextDTO);
lListeSemaine.add(lSemaineDTO);
for (int i = 0; i < (pNombreSemaineAvant – 1); i++) {
// On monte d’une semaine
pCalendar.add(Calendar.WEEK_OF_YEAR, 1);
lSemaineDTO = getSemaineByDate(pCalendar, pLocale, pContextDTO);
lListeSemaine.add(lSemaineDTO);
}
}
// Semaine en cours
pCalendar.add(Calendar.WEEK_OF_YEAR, 1);
lSemaineDTO = getSemaineByDate(pCalendar, pLocale, pContextDTO);
lListeSemaine.add(lSemaineDTO);
// Récupération des semaines après
for (int i = 0; i < pNombreSemaineApres; i++) {
// On monte d’une semaine
pCalendar.add(Calendar.WEEK_OF_YEAR, 1);
lSemaineDTO = getSemaineByDate(pCalendar, pLocale, pContextDTO);
lListeSemaine.add(lSemaineDTO);
}
}
J’ai pour ma part ensuite créer un objet DTO permettant de stocker chaque semaine. Cet objet est alimenté par la fonction suivante :
public SemaineDTO getSemaineByDate(Calendar pCalendar) {
SemaineDTO lSemaineDTO = new SemaineDTO();
lSemaineDTO.setAnnee(pCalendar.get(Calendar.YEAR));
lSemaineDTO.setMois(pCalendar.get(Calendar.MONTH));
lSemaineDTO.setNumeroSemaine(pCalendar.get(Calendar.WEEK_OF_YEAR));
// Obtention du premier jour de la semaine
pCalendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
lSemaineDTO.setDateDebut(pCalendar.getTime());
// Obtention du dernier jour de la semaine
pCalendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
lSemaineDTO.setDateFin(pCalendar.getTime());
return lSemaineDTO;
}
Cet object SemaineDTO contient les propriétés suivantes :
private int mNumeroSemaine;
private int mMois;
private int mAnnee;
private Date mDateDebut;
private Date mDateFin;
Ce qui permet ensuite de créer facilement une liste de semaine ayant la forme suivante :
Il est alors simple de créer une fonction pour gérer les boutons précédent et suivant en indiquant + ou – une semaine :
Soit moveSemaineFilter(-1) pour passer à une semaine précédente et moveSemaineFilter(-1) pour une semaine suivante.
Voici le code de cette fonction :
public void moveSemaineFilter(Long NbSemaine) {
// Récupération des paramètres
int lNombreSemaineAvant = 3;
int lNombreSemaineApres = 3;
// Récupération de la date en cours
Calendar lCalendar = Calendar.getInstance();
Calendar lCalendar2 = Calendar.getInstance();
lCalendar.setTime(mRdvFilter.getSemaine().getDateDebut());
// La date en cours doit être modifiée
lCalendar.add(Calendar.WEEK_OF_YEAR, NbSemaine.intValue());
lCalendar2.setTime(lCalendar.getTime());
// Rechargement de la liste des semaines
mListeSemaine.getListSemaine(lCalendar, lNombreSemaineAvant, lNombreSemaineApres);
// Modification de la semaine par défaut
mFilter.setSemaine(getSemaineByDate(lCalendar2));
}