web-dev-qa-db-fra.com

Obtenez le premier jour d'une semaine particulière dans Joda-Time? java

Dans Joda-Time , existe-t-il un moyen d'obtenir la date du premier jour de la semaine (lundi).

par exemple, je veux savoir quelle date était cette semaine lundi sur la base de la date actuelle 21/01/11

Bravo à l'avance.

edit: je souhaite également trouver la date de fin de semaine c'est-à-dire la date du dimanche. à votre santé

39
Jonathan

Essayez LocalDate.withDayOfWeek :

LocalDate now = new LocalDate();
System.out.println(now.withDayOfWeek(DateTimeConstants.MONDAY)); //prints 2011-01-17
System.out.println(now.withDayOfWeek(DateTimeConstants.SUNDAY)); //prints 2011-01-23
75
dogbane
LocalDate today = new LocalDate();
LocalDate weekStart = today.dayOfWeek().withMinimumValue();
LocalDate weekEnd = today.dayOfWeek().withMaximumValue();

Vous donnera les premier et dernier jours, c'est-à-dire le lundi et le dimanche

26
sudhir

Une autre option consiste à utiliser roundFloorCopy . Cela ressemble à ceci:

LocalDate startOfWeek = new LocalDate().weekOfWeekyear().roundFloorCopy();

Pour le dernier jour de la semaine standard (dimanche) utilisez roundCeilingCopy et minusDays

LocalDate lastDateOfWeek = new LocalDate().weekOfWeekyear().roundCeilingCopy().minusDays( 1 );

Fonctionne également pour DateTime. Et fonctionne en fin de semaine (exclusif).

DateTime dateTime = new DateTime();
DateTime startOfWeek = dateTime.weekOfWeekyear().roundFloorCopy();
DateTime endOfWeek = dateTime.weekOfWeekyear().roundCeilingCopy();

Dump sur console…

System.out.println( "dateTime " + dateTime );
System.out.println( "startOfWeek " + startOfWeek );
System.out.println( "endOfWeek " + endOfWeek );

Lors de l'exécution ...

dateTime 2014-01-24T00:00:34.955-08:00
startOfWeek 2014-01-20T00:00:00.000-08:00
endOfWeek 2014-01-27T00:00:00.000-08:00
12
SpaceTrucker

Vous pouvez utiliser la méthode getDayOfWeek () qui vous donne 1 pour lundi, 2 pour mar, .., 7 pour dimanche afin de remonter autant de jours et atteindre lundi:

import org.joda.time.DateTime;

    public class JodaTest {

        public static void main(String[] args) {
            DateTime date = new DateTime();
            System.out.println(date);
                    //2011-01-21T15:06:18.713Z
            System.out.println(date.minusDays(date.getDayOfWeek()-1));
                    //2011-01-17T15:06:18.713Z
        }
    }
5
dimitrisli

Voir la section "Querying DateTimes" du guide d'utilisation de Joda-Time .

Voici l'algorithme général que je suivrais:

  1. trouver le jour de la semaine de la date cible (21 janvier 2011 comme vous l'avez mentionné)
  2. déterminer combien de jours avant lundi c'est
  3. Soustrayez la valeur de # 2 de la date cible en utilisant dateTime.minusDays(n)
4
matt b