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 ListgetListSemaine(Calendar pCalendar, int pNombreSemaineAvant, int pNombreSemaineApres) {
  // Calcul d’une liste de semaines
  ListlListeSemaine = 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 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 :

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

 

 

 

podcast

À voir aussi

Tous les articles