7
votes

Joda-Time: Obtenez d'abord / deuxième / dernier dimanche du mois

En plain Java, j'ai ce code pour obtenir le dernier dimanche du mois. XXX

Qu'est-ce qu'un propre et élégant moyen d'obtenir le même résultat en utilisant joda-time ?


0 commentaires

7 Réponses :


5
votes
public class Time {
public static void main(String[] args) {
    System.out.println(getNthOfMonth(DateTimeConstants.SUNDAY, DateTimeConstants.SEP, 2012));
}


public static LocalDate getNthOfMonth(int day_of_week, int month, int year) {
    LocalDate date = new LocalDate(year, month, 1).dayOfMonth()  
             .withMaximumValue()
             .dayOfWeek()
             .setCopy(day_of_week);
    if(date.getMonthOfYear() != month) {
        return date.dayOfWeek().addToCopy(-7);
    }
    return date;
}
}

2 commentaires

Non, ce code donnera le dimanche de la dernière semaine du mois. Par exemple. Pour octobre 2012, il retournera le 4 novembre.


À droite. J'ai ajouté si la déclaration. Cela devrait maintenant être bien.



5
votes

Vous pouvez essayer quelque chose comme ça: xxx

sortie: xxx


1 commentaires

Utilisez des classes Java.Time et temporaladjuster pour raccourcir ce code. Voir Cette réponse .



2
votes
   static LocalDate getNthOfMonth(int n, int day_of_week, int month, int year)
   {
      if (n == -1)
      {
         return getNthOfMonth(0, day_of_week, month + 1, year);
      }
      final LocalDate compareDate = new LocalDate(year, month, 1);
      if (compareDate.getDayOfWeek() > day_of_week)
      {
         return compareDate.withDayOfWeek(day_of_week).plusDays(7 * n);   
      }
      else
      {
         return compareDate.withDayOfWeek(day_of_week).plusDays(7 * (n - 1));    
      }
   }  

1 commentaires

Utilisez des classes Java.Time et temporaladjuster pour raccourcir ce code. Voir Cette réponse .



2
votes

// méthode suivante donnera le dimanche dernier du mois et de l'année donnés xxx

// obj.getlastsunday (calendrier.octobre, 2014);


0 commentaires

6
votes

C'est tout à fait un ancien post mais peut-être cette réponse aidera quelqu'un. Utilisez les classes Java.Time qui remplacent Joda-Time.

private static LocalDate getNthOfMonth(int type, DayOfWeek dayOfWeek, int month, int year){
    return LocalDate.now().withMonth(month).withYear(year).with(TemporalAdjusters.dayOfWeekInMonth(type, dayOfWeek));
}


0 commentaires

3
votes

avec joda

disons que nous avons une date: p> xxx pré>

`Nous devons d'abord savoir si le mois a 31, 30, 28 ou 29 jours:

DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd");
System.out.println(dtf.print(lastSunday);


1 commentaires

belle explication



2
votes

Solution utilisant Java-8 Java.Time Code> API

Obtenez la date locale du dernier dimanche de l'année et du mois spécifiés: Strong> EM > p>

afin d'y parvenir avec le API-Time-Time moderne de Java, vous pouvez passer temporaladjusters.lastinmonth (jourfweek.sunday) code> comme une dispute à tout localdate code> de l'année et le mois spécifiés. p> xxx pré>

sortie: strong> p> xxx pré>

J'ai utilisé YearMonth # ATENDOFMONTH CODE > pour obtenir le localDate code>. Au lieu de cela, YearMonth # dayday code> peut également être utilisé. P>

Obtenez la date locale au nième jour-de-semaine (par exemple, 2nd jeudi) de l'année spécifiée et mois: strong> em> p>

vous pouvez passer temporaladjusters # DayOfweekInmons- code> comme un argument à tout localDate code> du . année et le mois p>

2020-12-10


0 commentaires