org.squale.welcom.outils.DateUtil.java Source code

Java tutorial

Introduction

Here is the source code for org.squale.welcom.outils.DateUtil.java

Source

/**
 * Copyright (C) 2008-2010, Squale Project - http://www.squale.org
 *
 * This file is part of Squale.
 *
 * Squale is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or any later version.
 *
 * Squale is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with Squale.  If not, see <http://www.gnu.org/licenses/>.
 */
/*
 * Cr le 15 dc. 04
 *
 * Pour changer le modle de ce fichier gnr, allez  :
 * Fentre&gt;Prfrences&gt;Java&gt;Gnration de code&gt;Code et commentaires
 */
package org.squale.welcom.outils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;

import org.apache.commons.validator.GenericValidator;

/**
 * @author M327836 Pour changer le modle de ce commentaire de type gnr, allez  :
 *         Fentre&gt;Prfrences&gt;Java&gt;Gnration de code&gt;Code et commentaires
 */
public class DateUtil {
    /** Constante */
    private static final int C1 = 1;

    /** Constante */
    private static final int C2 = 2;

    /** Constante */
    private static final int C3 = 3;

    /** Constante */
    private static final int C4 = 4;

    /** Constante */
    private static final int C7 = 7;

    /** Constante */
    private static final int C8 = 8;

    /** Constante */
    private static final int C11 = 11;

    /** Constante */
    private static final int C12 = 12;

    /** Constante */
    private static final int C14 = 14;

    /** Constante */
    private static final int C15 = 15;

    /** Constante */
    private static final int C17 = 17;

    /** Constante */
    private static final int C19 = 19;

    /** Constante */
    private static final int C22 = 22;

    /** Constante */
    private static final int C25 = 25;

    /** Constante */
    private static final int C30 = 30;

    /** Constante */
    private static final int C31 = 31;

    /** Constante */
    private static final int C32 = 32;

    /** Constante */
    private static final int C39 = 39;

    /** Constante */
    private static final int C49 = 49;

    /** Constante */
    private static final int C100 = 100;

    /** Constante */
    private static final int C144 = 144;

    /** Constante */
    private static final int C451 = 451;

    /** Constante */
    private static final int JANVIER = 0;

    /** Constante */
    private static final int FEVRIER = 1;

    /** Constante */
    private static final int MARS = 2;

    /** Constante */
    private static final int AVRIL = 3;

    /** Constante */
    private static final int MAI = 4;

    /** Constante */
    private static final int JUIN = 5;

    /** Constante */
    private static final int JUILLET = 6;

    /** Constante */
    private static final int AOUT = 7;

    /** Constante */
    private static final int NOVEMBRE = 10;

    /** Constante */
    private static final int DECEMBRE = 11;

    /** format jdbc date heure dd/MM/yyyy hh:mm */
    private static SimpleDateFormat msdf_jdbc_date_heure;

    /** format date dd/MM/yyyy */
    private static SimpleDateFormat msdf_francais;

    /** format jdbc date dd/MM/yyyy */
    private static SimpleDateFormat msdf_jdbc_date;

    /** Constante */
    public final static long MILLI_SEC = 1;

    /** Constante */
    public final static long SEC = 1000;

    /** Constante */
    public final static long MIN = SEC * 60;

    /** Constante */
    public final static long HOUR = MIN * 60;

    /** Constante */
    public final static long DAY = HOUR * 24;

    /** Constante */
    public final static long WEEK = DAY * 7;

    /** Constante */
    public final static int MONDAY = Calendar.MONDAY;

    /** Constante */
    public final static int TUESDAY = Calendar.TUESDAY;

    /** Constante */
    public final static int WEDNESDAY = Calendar.WEDNESDAY;

    /** Constante */
    public final static int THURSDAY = Calendar.THURSDAY;

    /** Constante */
    public final static int FRIDAY = Calendar.FRIDAY;

    /** Constante */
    public final static int SATURDAY = Calendar.SATURDAY;

    /** Constante */
    public final static int SUNDAY = Calendar.SUNDAY;

    /** Constante */
    private final static int WEEK_DAYS = 7;

    /**
     * constructeur
     */
    public DateUtil() {
    }

    /**
     * instanciation des formats de date
     */
    static void instanciate() {
        if (msdf_francais == null) {
            msdf_francais = new SimpleDateFormat("dd/MM/yyyy");
        }

        if (msdf_jdbc_date_heure == null) {
            msdf_jdbc_date_heure = new SimpleDateFormat("dd/MM/yyyy HH:mm");
        }

        if (msdf_jdbc_date == null) {
            msdf_jdbc_date = new SimpleDateFormat("dd/MM/yyyy");
        }
    }

    /**
     * @param date1 : chaine de caractre reprsentant une date de dbut du type "dd/MM/yyyy" ou "dd/MM/yyyy hh:mm"
     * @param date2 : chaine de caractre reprsentant une date de fin du type "dd/MM/yyyy" ou "dd/MM/yyyy hh:mm"
     * @param unit : unit de temps dans laquelle doit tre calcule la dure (MILLI_SEC,SEC,DAY,HOUR,MIN)
     * @return retourne le nombre de jour entre deux dates
     */
    public static long duration(final String date1, final String date2, final long unit) {
        return duration(parseAllDate(date1), parseAllDate(date2), unit);
    }

    /**
     * @param date1 : date de dbut (java.util.Date)
     * @param date2 : date de fin (java.util.Date)
     * @param unit : unit de temps dans laquelle doit tre calcule la dure (MILLI_SEC,SEC,DAY,HOUR,MIN)
     * @return retourne le nombre de jour entre deux dates
     */
    public static long duration(final java.util.Date date1, java.util.Date date2, final long unit) {
        date2 = addDaysDate(date2, 1);

        if ((date1 == null) || (date2 == null)) {
            return 0;
        }

        final long dateDebut = date1.getTime();
        final long dateFin = date2.getTime();

        return (dateFin - dateDebut) / unit;
    }

    /**
     * Ajoute un certain nombre de jour  une date
     * 
     * @param date1 Date sous forme de chaine de carectre
     * @param nbdays nombre de jours  ajouter
     * @return une date au format chaine de caractre avec le nombre de jour ajouts
     */
    public static String addDays(final String date1, final int nbdays) {
        instanciate();

        java.util.Date d = null;

        if (!GenericValidator.isBlankOrNull(date1)) {
            try {
                d = msdf_jdbc_date_heure.parse(date1);

                return msdf_jdbc_date_heure.format(addDaysDate(d, nbdays));
            } catch (final ParseException e) {
            }

            try {
                d = msdf_jdbc_date.parse(date1);

                return msdf_jdbc_date.format(addDaysDate(d, nbdays));
            } catch (final ParseException e) {
                return "";
            }
        } else {
            return "";
        }
    }

    /**
     * retourne le porchain jour de la semaine saisi en paramtre par rapport  la date d'entre
     * 
     * @param date date d'entre
     * @param dayofweek Jour de la semaine  utiliser
     * @return la date du prochain jour de la semaine
     */
    public static java.util.Date getNext(final java.util.Date date, final int dayofweek) {
        final GregorianCalendar gc = new GregorianCalendar();
        gc.setTime(date);

        final int actualday = gc.get(Calendar.DAY_OF_WEEK);
        gc.add(Calendar.DATE, ((dayofweek - actualday + WEEK_DAYS) % WEEK_DAYS));

        return gc.getTime();
    }

    /**
     * @param date date en entre
     * @return retourne le jour de la semaine correspondant  la date en entre
     */
    public static int getDay(final java.util.Date date) {
        final GregorianCalendar gc = new GregorianCalendar();
        gc.setTime(date);

        return gc.get(Calendar.DAY_OF_WEEK);
    }

    /**
     * Ajoute un certain nombre de jour  une date
     * 
     * @param date1 Date sous forme de jave.util.Date
     * @param nbdays nombre de jours  ajouter
     * @return la date avec le nombre de jour ajout
     */
    public static java.util.Date addDaysDate(final java.util.Date date1, final int nbdays) {
        if (date1 == null) {
            return null;
        }

        final GregorianCalendar cal = new GregorianCalendar();
        cal.setTime(date1);
        cal.add(Calendar.DATE, nbdays);

        return cal.getTime();
    }

    /**
     * @param date1 : chaine de caractre reprsentant une date de dbut du type "dd/MM/yyyy" ou "dd/MM/yyyy hh:mm"
     * @param date2 : chaine de caractre reprsentant une date de fin du type "dd/MM/yyyy" ou "dd/MM/yyyy hh:mm"
     * @param unit : unit de temps dans laquelle doit tre calcule la dure (MILLI_SEC,SEC,DAY,HOUR,MIN)
     * @return retourne le nombre de jour entre deux dates les samedi et dimanche n'tant pas inclu
     */
    public static long durationNoWeekEnd(final String date1, final String date2, final long unit) {
        return durationNoWeekEnd(parseAllDate(date1), parseAllDate(date2), unit);
    }

    /**
     * @param dateDebut : date de dbut (java.util.Date)
     * @param dateFin : date de fin (java.util.Date)
     * @param unit : unit de temps dans laquelle doit tre calcule la dure (MILLI_SEC,SEC,DAY,HOUR,MIN)
     * @return retourne le nombre de jour entre deux dates les samedi et dimanche n'tant pas inclu
     */
    public static long durationNoWeekEnd(final java.util.Date dateDebut, final java.util.Date dateFin,
            final long unit) {
        long duration = duration(dateDebut, dateFin, unit);
        final GregorianCalendar gc = new GregorianCalendar();

        if (duration != 0) {
            gc.setTime(dateDebut);

            while (gc.getTime().getTime() <= dateFin.getTime()) {
                if ((gc.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY)
                        || (gc.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)) {
                    duration--;
                }

                gc.add(Calendar.DATE, 1);
            }
        }

        return duration;
    }

    /**
     * converti une date chaine au format dd/MM/yyyy
     * 
     * @param dateAConvertir date  convertir
     * @return date convertie
     */
    public static String parseDatetoString(final String dateAConvertir) {
        return parseDatetoString(parseAllDate(dateAConvertir));
    }

    /**
     * converti une date au format dd/MM/yyyy
     * 
     * @param dateAConvertir date  convertir
     * @return date convertie
     */
    public static String parseDatetoString(final Date dateAConvertir) {
        if (dateAConvertir != null) {
            instanciate();

            final String dateRenvoyee = msdf_francais.format(dateAConvertir);

            return dateRenvoyee;
        } else {
            return "";
        }
    }

    /**
     * transforme une chaine de date type jdbc en date
     * 
     * @param psDate date chaine
     * @return une date
     * @throws ParseException parse exception
     * @deprecated utiliser la methode parseAllDate(String date)
     */
    public static java.util.Date parseJdbcToDate(final String psDate) throws ParseException {
        instanciate();

        if (!GenericValidator.isBlankOrNull(psDate)) {
            return msdf_jdbc_date.parse(psDate);
        } else {
            return null;
        }
    }

    /**
     * transforme une chaine de date type jdbc en date et heure
     * 
     * @param psDate date chaine
     * @return une date et heure
     * @throws ParseException parse exception
     * @deprecated utiliser la methode parseAllDate(String date)
     */
    public static java.util.Date parseJdbcToDateHeure(final String psDate) throws ParseException {
        instanciate();

        if (!GenericValidator.isBlankOrNull(psDate)) {
            return msdf_jdbc_date_heure.parse(psDate);
        } else {
            return null;
        }
    }

    /**
     * Transforme une chaine en date en prenant en compte les trois types de formats
     * 
     * @param date Chaine  transformer
     * @return la date transforme
     */
    public static java.util.Date parseAllDate(final String date) {
        instanciate();

        java.util.Date d = null;

        if (!GenericValidator.isBlankOrNull(date)) {
            try {
                d = msdf_jdbc_date_heure.parse(date);

                return d;
            } catch (final ParseException e) {
                try {
                    d = msdf_jdbc_date.parse(date);

                    return d;
                } catch (final ParseException pe) {
                    try {
                        final long timeLong = Long.parseLong(date);
                        d = new Date(timeLong);
                        return d;
                    } catch (final NumberFormatException nfe) {
                        return null;
                    }
                }
            }
        } else {
            return null;
        }
    }

    /**
     * les dates doivent tre au format "dd/MM/yyyy" ou "dd/MM/yyyy hh:mm"
     * 
     * @param fpbd = First Period begin date (Date de debut de la premire periode)
     * @param fped = First Period end date (Date de fin de la premire periode)
     * @param spbd = Second Period begin date (Date de debut de la seconde periode)
     * @param sped = Second Period end date (Date de fin de la seconde periode)
     * @return retourne le nombe de jours de chevauchement entre les 2 priodes
     */
    public static long overlappingDaysInPeriods(final String fpbd, final String fped, final String spbd,
            final String sped) {
        return overlappingDaysInPeriods(parseAllDate(fpbd), parseAllDate(fped), parseAllDate(spbd),
                parseAllDate(sped));
    }

    /**
     * @param fpbd = First Period begin date (Date de debut de la premire periode)
     * @param fped = First Period end date (Date de fin de la premire periode)
     * @param spbd = Second Period begin date (Date de debut de la seconde periode)
     * @param sped = Second Period end date (Date de fin de la seconde periode)
     * @return retourne le nombe de jours de chevauchement entre les 2 priodes
     */
    public static long overlappingDaysInPeriods(final java.util.Date fpbd, final java.util.Date fped,
            final java.util.Date spbd, final java.util.Date sped) {
        if (testNull(fpbd, fped, spbd, sped)) {
            return 0; // au moins une des dates est nulle...pas de chevauchement
        }

        if (noOverLap(fpbd, fped, spbd, sped)) {
            return 0; // pas de chevauchement des priodes
        }

        final long lfpbd = fpbd.getTime();
        final long lfped = fped.getTime();
        final long lspbd = spbd.getTime();
        final long lsped = sped.getTime();

        if (intersecType1(lfpbd, lfped, lspbd, lsped)) {
            return duration(spbd, fped, DAY);
        }

        if (intersecType2(lfpbd, lfped, lspbd, lsped)) {
            return duration(fpbd, sped, DAY);
        }

        if (intersecType3(lfpbd, lfped, lspbd, lsped)) {
            return duration(spbd, sped, DAY);
        }

        if (intersecType4(lfpbd, lfped, lspbd, lsped)) {
            return duration(fpbd, fped, DAY);
        }

        return 0;
    }

    /**
     * @param lfpbd long
     * @param lfped long
     * @param lspbd long
     * @param lsped long
     * @return vrai si ok
     */
    private static boolean intersecType4(final long lfpbd, final long lfped, final long lspbd, final long lsped) {
        return (lspbd < lfpbd) && (lfpbd < lfped) && (lfped < lsped);
    }

    /**
     * @param lfpbd long
     * @param lfped long
     * @param lspbd long
     * @param lsped long
     * @return vrai si ok
     */
    private static boolean intersecType3(final long lfpbd, final long lfped, final long lspbd, final long lsped) {
        return (lfpbd < lspbd) && (lspbd < lsped) && (lsped < lfped);
    }

    /**
     * @param lfpbd long
     * @param lfped long
     * @param lspbd long
     * @param lsped long
     * @return vrai si ok
     */
    private static boolean intersecType2(final long lfpbd, final long lfped, final long lspbd, final long lsped) {
        return (lspbd < lfpbd) && (lfpbd < lsped) && (lsped < lfped);
    }

    /**
     * @param lfpbd long
     * @param lfped long
     * @param lspbd long
     * @param lsped long
     * @return vrai si ok
     */
    private static boolean intersecType1(final long lfpbd, final long lfped, final long lspbd, final long lsped) {
        return (lfpbd < lspbd) && (lspbd < lfped) && (lfped < lsped);
    }

    /**
     * @param fpbd = First Period begin date (Date de debut de la premire periode)
     * @param fped = First Period end date (Date de fin de la premire periode)
     * @param spbd = Second Period begin date (Date de debut de la seconde periode)
     * @param sped = Second Period end date (Date de fin de la seconde periode)
     * @return vrai si les perodes de se chevauchent pas
     */
    private static boolean noOverLap(final java.util.Date fpbd, final java.util.Date fped,
            final java.util.Date spbd, final java.util.Date sped) {
        return (fped.getTime() < spbd.getTime()) || (sped.getTime() < fpbd.getTime());
    }

    /**
     * @param fpbd date
     * @param fped date
     * @param spbd date
     * @param sped date
     * @return vrai si une des dates est nulle
     */
    private static boolean testNull(final java.util.Date fpbd, final java.util.Date fped, final java.util.Date spbd,
            final java.util.Date sped) {
        return (fped == null) || (spbd == null) || (sped == null) || (fpbd == null);
    }

    /**
     * @param day = jour  tester au format chaine de caractre
     * @return Retourne si la date passe en entre correspond  un jour feri
     */
    public static boolean isPublicHolyday(final String day) {
        return isPublicHolyday(parseAllDate(day));
    }

    /**
     * @param day = jour  tester au format Date
     * @return Retourne si la date passe en entre correspond  un jour feri
     */
    public static boolean isPublicHolyday(final Date day) {
        if (day == null) {
            return false;
        }

        final GregorianCalendar gc = new GregorianCalendar();
        gc.setTime(day);

        final ArrayList ph = getPublicHolydays(gc.get(Calendar.YEAR));

        for (final Iterator iter = ph.iterator(); iter.hasNext();) {
            final Date d = (Date) iter.next();

            if (d.equals(day)) {
                return true;
            }
        }

        return false;
    }

    /**
     * @param year l'anne
     * @return retourne les jours fris d'une anne sous forme d'une ArrayList d'objets java.util.Date
     */
    public static ArrayList getPublicHolydays(final int year) {
        final ArrayList ph = new ArrayList();

        // Jours Fixes
        ph.add(new GregorianCalendar(year, JANVIER, C1).getTime()); // jour de l'an
        ph.add(new GregorianCalendar(year, MAI, C1).getTime()); // fte du travail
        ph.add(new GregorianCalendar(year, MAI, C8).getTime()); // victoire 1945
        ph.add(new GregorianCalendar(year, JUILLET, C14).getTime()); // fte nationale
        ph.add(new GregorianCalendar(year, AOUT, C15).getTime()); // assomption
        ph.add(new GregorianCalendar(year, NOVEMBRE, C11).getTime()); // armistice 1918
        ph.add(new GregorianCalendar(year, NOVEMBRE, C1).getTime()); // Toussaint
        ph.add(new GregorianCalendar(year, DECEMBRE, C25).getTime()); // nol

        // Calcul du Jours de Pques et du Lundi de Pques
        int m, c, y, s, t, p, q, e, b, d, l, h;
        int moispaques;
        int jourpaques;
        m = (year) % C19;
        c = year / C100;
        y = (year) % C100;
        s = c / C4;
        t = (c) % C4;
        p = (c + C8) / C25;
        q = (c - p + 1) / C3;
        e = (((C19 * m) + c) - s - q + C15) % C30;
        b = y / C4;
        d = y % C4;
        l = ((C32 + (C2 * t) + (C2 * b)) - e - d) % C7;
        h = (m + (C11 * e) + (C22 * l)) / C451;
        moispaques = (((e + l) - (C17 * h) + C144) / C31) - C2;
        jourpaques = (((e + l) - (C17 * h) + C144) % C31) + C2;

        ph.add(new GregorianCalendar(year, moispaques, jourpaques).getTime()); // Dianche de pques
        ph.add(new GregorianCalendar(year, moispaques, jourpaques + 1).getTime()); // Lundi de pques

        // Calcul du jour de la Pentecte et du lundi de Pentecte
        int jourpentecote = C1;
        int moispentecote = FEVRIER;

        if (moispaques == MARS) {
            jourpentecote = C49 - (C31 - jourpaques + C30);
            moispentecote = MAI;
        }

        if ((moispaques == AVRIL) && (jourpaques <= C12)) {
            jourpentecote = C49 - (C30 - jourpaques);
            moispentecote = MAI;
        }

        if ((moispaques == AVRIL) && (jourpaques > C12)) {
            jourpentecote = C49 - (C30 - jourpaques + C31);
            moispentecote = JUIN;
        }

        ph.add(new GregorianCalendar(year, moispentecote, jourpentecote).getTime()); // Dianche de pentecte
        ph.add(new GregorianCalendar(year, moispentecote, jourpentecote + 1).getTime()); // Lundi de pentecte

        // Calcul du jour de l'Ascension
        int jourAscension = C1;
        int moisAscension = FEVRIER;

        if ((jourpaques == C22) && (moispaques == MARS)) {
            jourAscension = C30;
            moisAscension = AVRIL;
        }

        if ((jourpaques > C22) && (moispaques == MARS)) {
            jourAscension = C39 - (C31 - jourpaques + C30);
            moisAscension = MAI;
        }

        if ((jourpaques <= C22) && (moispaques == AVRIL)) {
            jourAscension = C39 - (C30 - jourpaques);
            moisAscension = MAI;
        }

        if ((jourpaques > C22) && (moispaques == AVRIL)) {
            jourAscension = C39 - (C30 - jourpaques + C31);
            moisAscension = JUIN;
        }

        ph.add(new GregorianCalendar(year, moisAscension, jourAscension).getTime()); // Ascension

        return ph;
    }

    /**
     * @param beginDate date de dbut de la priode en Chaine de caractres
     * @param endDate date de fin de la priode en Chaine de caractres
     * @param weekend true pour que les jours fris tombant un week end soient comtabilis, false sinon.
     * @return retourne le nombre de jours fris dans la priode.
     */
    public static int getNbPublicHolliday(final String beginDate, final String endDate, final boolean weekend) {
        return getNbPublicHolliday(parseAllDate(beginDate), parseAllDate(endDate), weekend);
    }

    /**
     * Retourn l'anne en int d'une date
     * 
     * @param gc gregorien calendar
     * @param date date
     * @return l'anne en int d'une date
     */
    private static int getYearOfDate(GregorianCalendar gc, final Date date) {

        // recupere l'anne de debut
        gc.setTime(date);
        return gc.get(Calendar.YEAR);
    }

    /**
     * Retourn le nombre de jour ferier entre 2 anne
     * 
     * @param by : anne debut
     * @param ey : anne fin
     * @return les jours feriers
     */
    private static ArrayList getPublicHolliday(final int by, final int ey) {

        // Recupere la liste de jour ferier sur l'anne
        final ArrayList ph = new ArrayList();
        for (int i = by; i <= ey; i++) {
            ph.addAll(getPublicHolydays(i));
        }

        return ph;
    }

    /**
     * @param beginDate date de dbut de la priode en Date
     * @param endDate date de fin de la priode en Date
     * @param weekend true pour que les jours fris tombant un week end soient comtabilis, false sinon.
     * @return retourne le nombre de jours fris dans la priode.
     */
    public static int getNbPublicHolliday(final Date beginDate, final Date endDate, final boolean weekend) {
        if ((beginDate == null) || (endDate == null)) {
            return 0;
        }
        final GregorianCalendar gc = new GregorianCalendar();
        // recupere l'anne de debut
        int by = getYearOfDate(gc, beginDate);

        // Recupere l'anne de fin
        int ey = getYearOfDate(gc, endDate);

        // Recupere les jours de vacance des 2 annes
        ArrayList ph = getPublicHolliday(by, ey);

        int nbph = 0;

        for (final Iterator iter = ph.iterator(); iter.hasNext();) {
            final Date d = (Date) iter.next();
            gc.setTime(d);

            // Si les WEEK-END sont compatbili , les ajouter au compteur
            if (weekend) {
                if (isBetween(d, beginDate, endDate)) {
                    nbph++;
                }
            } else {
                // Verifie que ce n'est pas un Samedi ou un dimance pour ompatibilit
                if ((gc.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY)
                        && (gc.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY)) {
                    if (isBetween(d, beginDate, endDate)) {
                        nbph++;
                    }
                }
            }
        }

        return nbph;
    }

    /**
     * teste si une date est entre deux autre dates
     * 
     * @param beginDate date de debut
     * @param endDate date de fin
     * @param testDate date  tester
     * @return vrai si la date testDate se situe entre la date de debut et la date de fin
     */
    public static boolean isBetween(final Date testDate, final Date beginDate, final Date endDate) {
        return (beginDate.getTime() <= testDate.getTime()) && (endDate.getTime() >= testDate.getTime());
    }

    /**
     * @return msdf_jdbc_date_heure
     */
    public static SimpleDateFormat sdf_jdbc_date_heure() {
        return msdf_jdbc_date_heure;
    }

    /**
     * @return msdf_francais
     */
    public static SimpleDateFormat sdf_francais() {
        return msdf_francais;
    }

    /**
     * @return msdf_jdbc_date
     */
    public static SimpleDateFormat sdf_jdbc_date() {
        return msdf_jdbc_date;
    }

}