web-dev-qa-db-fra.com

Java - Comment calculer le premier et le dernier jour de chaque semaine

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

16
user236501

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

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).

6
Michael Piefel

Java.time

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
5
Przemek

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

    }
1
Sibin

Si vous savez quel jour il est (vendredi) et la date actuelle (11 juin), vous pouvez calculer les autres jours de cette semaine.

1
Sjoerd

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.

1
kgiannakakis

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

0
Ant

Oui. Utilisez Joda Time

http://joda-time.sourceforge.net/

0
user334583