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.
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());
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.
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();
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());
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);
}
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
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);