public long weekdays() { if (weekdays == -1) { weekdays = 0; NSTimeZone tz = NSTimeZone.timeZoneWithName("America/Los_Angeles", true); // NSTimestamp currDatePacific = new NSTimestamp(currDate.getTime(), tz); NSTimestamp startDate = new NSTimestamp(day1.getTime(), tz); GregorianCalendar cal = new GregorianCalendar(); int num = (int) calendardays(); for (int i = 0; i < num; i++) { // will check the start date, all days in-between and the end-date NSTimestamp tempDate = startDate.timestampByAddingGregorianUnits(0, 0, i, 0, 0, 0); cal.setTime(tempDate); // The day-of-week is an integer value where 1 is Sunday, 2 is Monday, ..., and 7 is // Saturday int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); if ((dayOfWeek > 1) && (dayOfWeek < 7)) { weekdays++; } } } return weekdays; }
/** * TODO traiter le cas d'une periode unique a 1 jour qui tombe le 31 ... * * <p>Retourne la duree d'une periode sur la base de 1 mois = 30 jours 1 an = 12 mois = 360 jours * * @param dateDebut * @param dateDebut * @return le nombre de jours de cette periode sur cette base */ public static int getTotalJours360(NSTimestamp dateDebut, NSTimestamp dateFin) { int dureePeriode = 0; NSTimestamp dateDebutMoisEnCours = DateCtrlConges.dateToDebutMois(dateDebut); NSTimestamp dateFinMoisEnCours = DateCtrlConges.dateToFinMois(dateDebut); while (DateCtrlConges.isBeforeEq(dateDebutMoisEnCours, dateFin)) { boolean moisComplet = true; // recadrage du debut et de la fin sur la periode if (DateCtrlConges.isBefore(dateDebutMoisEnCours, dateDebut)) { dateDebutMoisEnCours = dateDebut; moisComplet = false; } if (DateCtrlConges.isAfter(dateFinMoisEnCours, dateFin)) { dateFinMoisEnCours = dateFin; moisComplet = false; } // si le mois est complet, on compte 30 jours if (moisComplet) { dureePeriode += 30; } else { // +1 car de j à j+i, il y a i+1 jours complets dureePeriode += (dateFinMoisEnCours.getTime() - dateDebutMoisEnCours.getTime()) / (1000 * 60 * 60 * 24) + 1; } // avance au mois suivant dateDebutMoisEnCours = DateCtrlConges.dateToDebutMois(dateDebutMoisEnCours) .timestampByAddingGregorianUnits(0, 1, 0, 0, 0, 0); dateFinMoisEnCours = dateDebutMoisEnCours.timestampByAddingGregorianUnits(0, 1, -1, 0, 0, 0); } return dureePeriode; }