Wie erhalte ich mit JodaTime das letzte Datum eines bestimmten Monats?

Lesezeit: 1 Minute

Benutzer-Avatar
Iwan

Ich muss das erste Date bekommen (wie org.joda.time.LocalDate) eines Monats und der letzte. Den ersten zu bekommen ist trivial, aber den letzten zu bekommen, scheint etwas Logik zu erfordern, da die Monate unterschiedlich lang sind und die Länge des Februars sogar über die Jahre hinweg variiert. Gibt es dafür bereits einen Mechanismus in JodaTime oder sollte ich ihn selbst implementieren?

  • Nur ein Heads-up, das funktioniert auch mit DateTime Typen 🙂

    – Wikingersteve

    26. September 2014 um 11:14 Uhr

Benutzer-Avatar
Jon Skeet

Wie wäre es mit:

LocalDate endOfMonth = date.dayOfMonth().withMaximumValue();

dayOfMonth() gibt a zurück LocalDate.Property das das Feld “Tag des Monats” auf eine Weise darstellt, die den Ursprung kennt LocalDate.

Wie es passiert, die withMaximumValue() Methode ist sogar dokumentiert um es für diese spezielle Aufgabe zu empfehlen:

Diese Operation ist nützlich, um ein LocalDate am letzten Tag des Monats zu erhalten, da die Monatslängen variieren.

LocalDate lastDayOfMonth = dt.dayOfMonth().withMaximumValue();

  • @Jon Skeet Wie bekomme ich das mit der neuen Date and Time API von Java 8?

    – Warren Nocos

    9. November 2015 um 12:21 Uhr

  • @WarrenM.Nocos: Ich würde verwenden dt.with(TemporalAdjusters.lastDayOfMonth())

    – Jon Skeet

    9. November 2015 um 12:38 Uhr

Eine andere einfache Methode ist diese:

//Set the Date in First of the next Month:
answer = new DateTime(year,month+1,1,0,0,0);
//Now take away one day and now you have the last day in the month correctly
answer = answer.minusDays(1);

  • Was passiert dann, wenn Ihr Monat = 12 ist?

    – Jon

    28. Februar 2018 um 20:12 Uhr

  • Die JodaTime-API ist ein ausgeklügeltes, voll geladenes und praktisches Stück Arbeit. Es gibt viele andere, korrektere Wege, dies zu erreichen.

    – aaiezza

    13. Juni 2018 um 18:10 Uhr

  • Wenn der Monat 12 ist, wissen Sie, dass der letzte Tag 31 ist, richtig? Setzen Sie einfach so etwas: if(month<12) { answer = new DateTime(year,month+1,1,0,0,0); antwort = antwort.minusDays(1); } Sonst Antwort = 31;

    – Abraham Maldonado Barrios

    7. November 2018 um 14:15 Uhr


Eine alte Frage, aber ein Top-Google-Ergebnis, als ich danach suchte.

Falls jemand den eigentlichen letzten Tag als eine benötigt int Anstatt JodaTime zu verwenden, können Sie Folgendes tun:

public static final int JANUARY = 1;

public static final int DECEMBER = 12;

public static final int FIRST_OF_THE_MONTH = 1;

public final int getLastDayOfMonth(final int month, final int year) {
    int lastDay = 0;

    if ((month >= JANUARY) && (month <= DECEMBER)) {
        LocalDate aDate = new LocalDate(year, month, FIRST_OF_THE_MONTH);

        lastDay = aDate.dayOfMonth().getMaximumValue();
    }

    return lastDay;
}

  • Ich hätte eine etwas sauberere Antwort vorgezogen, wie: public static int getLastDayOfMonth(int year, int month){ LocalDate date = new LocalDate(year, month, 1 return date.dayOfMonth().getMaximumValue(); } Aber deine Antwort ist super hilfreich, auch wenn etwas überladen, also +1 😉

    – jumps4fun

    18. Oktober 2018 um 8:40 Uhr

Mit JodaTime können wir dies tun:


    public static final Integer CURRENT_YEAR = DateTime.now().getYear();

    public static final Integer CURRENT_MONTH = DateTime.now().getMonthOfYear();

    public static final Integer LAST_DAY_OF_CURRENT_MONTH = DateTime.now()
            .dayOfMonth().getMaximumValue();

    public static final Integer LAST_HOUR_OF_CURRENT_DAY = DateTime.now()
            .hourOfDay().getMaximumValue();

    public static final Integer LAST_MINUTE_OF_CURRENT_HOUR = DateTime.now().minuteOfHour().getMaximumValue();

    public static final Integer LAST_SECOND_OF_CURRENT_MINUTE = DateTime.now().secondOfMinute().getMaximumValue();


    public static DateTime getLastDateOfMonth() {
        return new DateTime(CURRENT_YEAR, CURRENT_MONTH,
                LAST_DAY_OF_CURRENT_MONTH, LAST_HOUR_OF_CURRENT_DAY,
                LAST_MINUTE_OF_CURRENT_HOUR, LAST_SECOND_OF_CURRENT_MINUTE);
    }

Wie hier in meinem kleinen Kern auf Github beschrieben: Eine JodaTime und java.util.Date Util Class mit vielen nützlichen Funktionen.

1313910cookie-checkWie erhalte ich mit JodaTime das letzte Datum eines bestimmten Monats?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy