web-dev-qa-db-fra.com

Comment obtenir la dernière date d'un mois avec JodaTime?

Je dois obtenir le premier rendez-vous (comme org.joda.time.LocalDate) d'un mois et le dernier. Obtenir le premier est trivial, mais obtenir le dernier semble nécessiter une certaine logique puisque les mois ont une durée différente et que la durée en février varie même au fil des ans. Existe-t-il un mécanisme pour cela déjà intégré à JodaTime ou dois-je le mettre en œuvre moi-même?

106
Ivan

Que diriez-vous:

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

dayOfMonth() renvoie un LocalDate.Property qui représente le champ "jour du mois" de manière à connaître le LocalDate d'origine.

En l'occurrence, la méthode withMaximumValue() est même documentée pour la recommander pour cette tâche particulière:

Cette opération est utile pour obtenir une date locale le dernier jour du mois, car sa durée varie.

LocalDate lastDayOfMonth = dt.dayOfMonth().withMaximumValue();
211
Jon Skeet

Une autre méthode simple est la suivante:

//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);

Une vieille question, mais un résultat Google top quand je cherchais cela.

Si quelqu'un a besoin du dernier jour en tant que int à la place de JodaTime, vous pouvez procéder comme suit:

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;
}
1
wiredniko