java - tag - Obtenez d'abord lundi prochain après une certaine date?




regex extract tag content (4)

Au lieu de System.out.println(date1); utilisez System.out.println(date1.getTime());

getTime renvoie une instance de Date qui représente l'état actuel du Calendar

Quel sera le résultat Mon Jul 14 00:00:00 EST 2014

System.out.println(date1) est l'équivalent de l'utilisation de System.out.println(date1.toString()) , qui, dans ce cas, est un tas d'informations utiles sur l'état de l'objet Calendar , mais pas vraiment données lisibles par l'homme.

System.out.println(date1.getTime()) utilisera la méthode Date to toString pour afficher une valeur de date, formatée en fonction des paramètres locaux actuels, qui fournira des informations plus utiles.

Actualisé

Au lieu d'utiliser GregorianCalendar , vous devriez utiliser le Calendar système, par exemple ...

Calendar date1 = Calendar.getInstance();
date1.set(2014, 06, 12);

En outre, les mois sont 0 indexés, ce qui signifie que Janurary est en réalité 0 non 1 , donc dans votre exemple, vous avez spécifié le mois en juillet, pas en juin.

Donc, à la place, en utilisant ...

Calendar date1 = Calendar.getInstance();
date1.set(2014, 05, 12);

while (date1.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
    date1.add(Calendar.DATE, 1);
}

System.out.println(date1.getTime());

Qui a sorti ...

Mon Jun 16 16:22:26 EST 2014

Quel est lundi prochain à partir d'aujourd'hui ... plus ou moins;)

Je sais qu'il y a la même question ici , mais j'ai essayé la réponse fournie et j'ai renvoyé une sortie que je ne comprends pas. Je suis confus par la réponse et je ne pense pas que la sortie est correcte.

J'ai besoin d'aide, merci :)

GregorianCalendar date1 = new GregorianCalendar( 2014, 05, 12 ); //05 is june as month start from 0 -11

while( date1.get( Calendar.DAY_OF_WEEK ) != Calendar.MONDAY )
    date1.add( Calendar.DATE, 1 );  

System.out.println(date1);

Voici la sortie:

java.util.GregorianCalendar[time=1405267200000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Singapore",offset=28800000,dstSavings=0,useDaylight=false,transitions=9,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2014,MONTH=6,WEEK_OF_YEAR=29,WEEK_OF_MONTH=3,DAY_OF_MONTH=14,DAY_OF_YEAR=195,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=2,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=28800000,DST_OFFSET=0]

Où sur la sortie dois-je extraire pour récupérer la date du lundi?


Une modification mineure à votre code:

    GregorianCalendar date1 = new GregorianCalendar(2014, 6, 12);

    while (date1.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
        date1.add(Calendar.DATE, 1);
    }

    SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
    System.out.println(sdf.format(date1.getTime()));

Rendements:

 14-07-2014

EDIT: Selon la documentation de JavaDoc , le constructeur que vous utilisez, s'attend à un index basé sur 0, donc pour le mois de juin, vous devrez passer une valeur de 5, pas 6.


Ou Faites simplement des calculs simples. Depuis Calender.Monday est égal à 2, il est facile de calculer le nombre de jours qui doivent être ajoutés à la date actuelle.

Calendar date1 = Calendar.getInstance();
date1.set(2014, 05, 12);
int dayOfWeek = date1.get(Calendar.DAY_OF_WEEK);
date1.add(Calendar.DATE, (9 - dayOfWeek) % 7);

tl; dr

LocalDate.of( 2014 , Month.JUNE , 12 )
         .with( TemporalAdjusters.next( DayOfWeek.MONDAY ) )

Utiliser java.time

Vous utilisez des anciennes classes de date-heure problématiques qui sont maintenant héritées, supplantées par les classes java.time.

La classe LocalDate représente une valeur de date uniquement sans heure et sans fuseau horaire.

LocalDate ld = LocalDate.of( 2014 , Month.JUNE , 12 ) ;

Pour obtenir le lundi suivant, utilisez une implémentation TemporalAdjuster trouvée dans la classe TemporalAdjusters .

LocalDate nextMonday = ld.with( TemporalAdjusters.next( DayOfWeek.MONDAY ) ) ;

Si vous voulez aller avec la date d'origine si elle est elle-même un lundi, alors utilisez nextOrSame ajusteur.

LocalDate nextOrSameMonday = ld.with( TemporalAdjusters.nextOrSame( DayOfWeek.MONDAY ) ) ;

À propos de java.time

Le framework java.time est intégré dans Java 8 et versions ultérieures. Ces classes remplacent les vieilles classes de date-heure héritées , telles que java.util.Date , Calendar et SimpleDateFormat .

Le projet Joda-Time , maintenant en mode maintenance , conseille la migration vers les classes java.time .

Pour en savoir plus, consultez le tutoriel Oracle . Et recherchez pour de nombreux exemples et explications. La spécification est JSR 310 .

Où obtenir les classes java.time?

  • Java SE 8 , Java SE 9 et versions ultérieures
    • Intégré
    • Partie de l'API Java standard avec une implémentation groupée.
    • Java 9 ajoute quelques fonctionnalités et corrections mineures.
  • Java SE 6 et Java SE 7
    • La plupart des fonctionnalités de java.time sont reportées sur Java 6 et 7 dans ThreeTen-Backport .
  • Android
    • Le projet ThreeTenABP adapte ThreeTen-Backport (mentionné ci-dessus) pour Android spécifiquement.
    • Voir Comment utiliser ThreeTenABP ....

Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est un terrain d'essai pour d'éventuels ajouts futurs à java.time. Vous pouvez trouver ici des classes utiles telles que Interval , YearWeek , YearQuarter , et plus encore .