web-dev-qa-db-fra.com

Obtenez le premier et le dernier jour du mois en utilisant threeten, LocalDate

J'ai un LocalDate qui doit avoir le premier et le dernier jour du mois. Comment je fais ça?

par exemple. 13/2/2014 Je dois obtenir le 1/2/2014 et le 28/2/2014 aux formats LocalDate.

Utilisation de la classe LocalDate.

90
user1746050

Il suffit d'utiliser withDayOfMonth et lengthOfMonth():

LocalDate initial = LocalDate.of(2014, 2, 13);
LocalDate start = initial.withDayOfMonth(1);
LocalDate end = initial.withDayOfMonth(initial.lengthOfMonth());
142
Jon Skeet

L'API a été conçue pour prendre en charge une solution qui correspond étroitement aux besoins de l'entreprise.

import static Java.time.temporal.TemporalAdjusters.*;

LocalDate initial = LocalDate.of(2014, 2, 13);
LocalDate start = initial.with(firstDayOfMonth());
LocalDate end = initial.with(lastDayOfMonth());

Cependant, les solutions de Jon sont également acceptables.

125
JodaStephen

YearMonth

Pour être plus complet et plus élégant à mon avis, voyez cette utilisation de YearMonth classe.

YearMonth month = YearMonth.from(date);
LocalDate start = month.atDay(1);
LocalDate end   = month.atEndOfMonth();

Pour le premier et le dernier jour du mois en cours, cela devient:

LocalDate start = YearMonth.now().atDay(1);
LocalDate end   = YearMonth.now().atEndOfMonth();
43
herman

La réponse de Jon Skeets est juste et mérite mon vote positif, en ajoutant simplement cette solution légèrement différente pour être complet:

import static Java.time.temporal.TemporalAdjusters.lastDayOfMonth;

LocalDate initial = LocalDate.of(2014, 2, 13);
LocalDate start = initial.withDayOfMonth(1);
LocalDate end = initial.with(lastDayOfMonth());
15
Meno Hochschild

Si quelqu'un cherche premier jour du mois précédent et dernier jour du mois précédent:

public static LocalDate firstDayOfPreviousMonth(LocalDate date) {
        return date.minusMonths(1).withDayOfMonth(1);
    }


public static LocalDate lastDayOfPreviousMonth(LocalDate date) {
        return date.withDayOfMonth(1).minusDays(1);
    }
2
Anil Bhaskar

Essaye ça:

LocalDate initial = LocalDate.of(2014, 2, 13);
LocalDate start = initial.withDayOfMonth(1);         
LocalDate end = initial.withDayOfMonth(initial.getMonthOfYear().getLastDayOfMonth(false));
System.out.println(start);
System.out.println(end);

vous pouvez trouver la sortie désirée mais vous devez vous occuper du paramètre true/false pour getLastDayOfMonth méthode

ce paramètre indique l'année bissextile

1
Shekhar Rajput

si vous voulez le faire uniquement avec la classe LocalDate:

LocalDate initial = LocalDate.of(2014, 2, 13);

LocalDate start = LocalDate.of(initial.getYear(), initial.getMonthValue(),1);

// Idea: the last day is the same as the first day of next month minus one day.
LocalDate end = LocalDate.of(initial.getYear(), initial.getMonthValue(), 1).plusMonths(1).minusDays(1);
0
MrSmith42