Ajout de semaine avec Calendar, year, week_of_year / Etrange ...

motylefr Messages postés 2 Date d'inscription mardi 24 août 2010 Statut Membre Dernière intervention 19 novembre 2010 - 19 nov. 2010 à 12:54
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 - 19 nov. 2010 à 23:27
Bonjour

J'ai besoin d'ajouter ou de soustraire des semaines sur une date au format année-semaine, par exemple 2010-46 +1 = 2010-47.
Mais chose étrange ,
2004-53 + 1 = 2005-1 ok

2009-52 + 1 = 2010-53 !!!
2010-1 - 1 = 2010-53 !!!

2015 ok
2020 pb à nouveau.

Pour les années de 52 semaines, pas de souci.
Est-ce que quelqu'un aurait une explication, ou aurait déjà rencontré un problème similaire avec ce Calendar ?
Merci pour votre aide.
Motyle

import java.util.GregorianCalendar;

public class TestAddWeek {
public static String addToWeek(int nbrweek, int yearIni, int weekIni){
GregorianCalendar gc = new GregorianCalendar();
gc.setFirstDayOfWeek(java.util.Calendar.MONDAY);
gc.setMinimalDaysInFirstWeek(4);

gc.set(GregorianCalendar.YEAR, yearIni);
gc.set(GregorianCalendar.WEEK_OF_YEAR, weekIni);

// --- ajout semaine
gc.add(GregorianCalendar.WEEK_OF_YEAR, nbrweek);

// --- Extraction du résultat + formatage
int weekFin = gc.get(GregorianCalendar.WEEK_OF_YEAR);
int yearFin = gc.get(GregorianCalendar.YEAR);
return Integer.toString(yearFin) + "-" + Integer.toString(weekFin);
}
public static void main(String[] args) {
// 53 semaines en 2004 ok
System.out.println(addToWeek(1, 2004, 52));//2004-53
System.out.println(addToWeek(1, 2004, 53));//2005-1
System.out.println(addToWeek(-1, 2005, 01));//2004-53

// 53 semaines en 2009
System.out.println(addToWeek(1, 2009, 52));//2010-53 !!!
System.out.println(addToWeek(1, 2009, 53));//2010-1
System.out.println(addToWeek(-1, 2010, 01));//2010-53 !!!
// 52 semaines en 2010 ok
System.out.println(addToWeek(1, 2010, 52));//2011-1
System.out.println(addToWeek(-1, 2011, 01));//2010-52
}
}

2 réponses

motylefr Messages postés 2 Date d'inscription mardi 24 août 2010 Statut Membre Dernière intervention 19 novembre 2010
19 nov. 2010 à 15:51
Il semblerait que
GregorianCalendar gc = new GregorianCalendar();
gc.clear();
règle le problème !
0
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
19 nov. 2010 à 23:27
Pour manipuler des dates en java, JodaTime se révèle être très pratique.
Ici la javadocet là un guide.

Par exemple :

private static void addWeek(int year, int week, int weekToAdd) {
MutableDateTime mdt = new MutableDateTime();
DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-ww");
mdt.setYear(year);
mdt.setWeekOfWeekyear(week);
System.out.println(mdt.toString(dtf));
mdt.addWeeks(weekToAdd);
System.out.println(mdt.toString(dtf));
}


L'objet MutableDateTime permet de créer une date et d'y ajouter jours/semaines/mois/années, et il suffit pour l'afficher de spéficier quel format utiliser.

Fanny
0
Rejoignez-nous