Java – Création d'une liste de semaine

La classe Calendar de Java s’avère bien utilie pour pouvoir manipuler des dates.
Jérôme POUSSINEAUMis à jour le 18 Oct 2013

La classe Calendar de JavaLangage de développement très populaire ! savè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 getListSemaine(Calendar pCalendar, int pNombreSemaineAvant, int pNombreSemaineApres) {   // Calcul dune liste de semaines   List lListeSemaine = new ArrayList(1 + pNombreSemaineAvant + pNombreSemaineApres);   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 dune 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 dune semaine      pCalendar.add(Calendar.WEEK_OF_YEAR, 1);      lSemaineDTO = getSemaineByDate(pCalendar, pLocale, pContextDTO);      lListeSemaine.add(lSemaineDTO);   } }

Jai 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 : 

semaine.jpg

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