J'essaie de créer un calendrier hebdomadaire qui ressemble à ceci: http://dhtmlx.com/docs/products/dhtmlxscheduler/sample_basic.html
Comment puis-je calculer chaque semaine la date? Par exemple, cette semaine est:
Lundi dimanche
7 juin, 8 juin, 9 juin, 10 juin, 11 juin, 12 juin, 13 juin
Je suppose que cela fait ce que vous voulez:
// Get calendar set to current date and time
Calendar c = Calendar.getInstance();
// Set the calendar to monday of the current week
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
// Print dates of the current week starting on Monday
DateFormat df = new SimpleDateFormat("EEE dd/MM/yyyy");
for (int i = 0; i < 7; i++) {
System.out.println(df.format(c.getTime()));
c.add(Calendar.DATE, 1);
}
Il suffit de définir le jour de la semaine ne semble pas être fiable. Considérez le code simple suivant:
Calendar calendar = Calendar.getInstance(Locale.GERMANY);
calendar.set(2011, Calendar.SEPTEMBER, 18);
System.out.printf("Starting day: %tF%n", calendar);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
System.out.printf("Last monday: %tF%n", calendar);
System.out.printf("First day of week: %d%n", calendar.getFirstDayOfWeek());
Le résultat de l'exécution de ce programme est:
Starting day: 2011-09-18
Last monday: 2011-09-19
First day of week: 2
En d'autres termes, il a progressé dans le temps. Pour une locale allemande, ce n'est vraiment pas la réponse attendue. Notez que le calendrier utilise correctement lundi comme premier jour de la semaine (seulement pour informer la semaine de l'année, peut-être).
Utilisation de la bibliothèque Java.time
Intégrée à Java 8:
import Java.time.DayOfWeek;
import Java.time.LocalDate;
import static Java.time.temporal.TemporalAdjusters.previousOrSame;
import static Java.time.temporal.TemporalAdjusters.nextOrSame;
LocalDate now = LocalDate.now(); # 2015-11-23
LocalDate first = now.with(previousOrSame(DayOfWeek.MONDAY)); # 2015-11-23
LocalDate last = now.with(nextOrSame(DayOfWeek.SUNDAY)); # 2015-11-29
Vous pouvez parcourir DayOfWeek.values()
pour obtenir toutes les jours de la semaine en cours
DayOfWeek.values(); # Array(MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY)
for (DayOfWeek day: DayOfWeek.values()) {
System.out.print(first.with(nextOrSame(day)));
} # 2015-11-23, 2015-11-24, 2015-11-25, 2015-11-26, 2015-11-27, 2015-11-28, 2015-11-29
Vous pouvez vous accumuler à ce sujet: Le code suivant imprime les premières et les dernières dates de chaque semaine pendant 15 semaines à partir de maintenant.
Calendar c = Calendar.getInstance();
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
for(int i=0; i<15; i++)
{
System.out.print("Start Date : " + c.getTime() + ", ");
c.add(Calendar.DAY_OF_WEEK, 6);
System.out.println("End Date : " + c.getTime());
c.add(Calendar.DAY_OF_WEEK, 1);
}
Calendar startCal = Calendar.getInstance();
startCal.setTimeInMillis(startDate);
Calendar endCal = Calendar.getInstance();
endCal.setTimeInMillis(endDate);
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMMM-yyyy");
while (startCal.before(endCal)) {
int weekNumber = startCal.get(Calendar.WEEK_OF_YEAR);
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
cal.set(Calendar.WEEK_OF_YEAR, weekNumber);
Date sunday = cal.getTime();
Log.d("sunday", "" + sdf.format(sunday));
cal.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
cal.set(Calendar.WEEK_OF_YEAR, weekNumber);
Date saturday = cal.getTime();
Log.d("saturday", "" + sdf.format(saturday));
weekNumber = weekNumber + 1;
startCal.set(Calendar.WEEK_OF_YEAR, weekNumber);
}
Si vous savez quel jour il est (vendredi) et la date actuelle (11 juin), vous pouvez calculer les autres jours de cette semaine.
Je vous recommande d'utiliser Joda Bibliothèque de temps. La classe de calendrier grégorienne a une semaine d'année et des méthodes de dayfweek.
L'algorithme que vous recherchez (calculer le jour de la semaine pour une date donnée) est "DIGUENCE DE ZELLER". Voici un Java Mise en œuvre:
http://technojeceves.com/joomla/index.php/free/57-zellers-conchuence
Oui. Utilisez Joda Time