tl; dr
YearMonth.now().minusMonths(1).atDay(1)
... e ...
YearMonth.now().minusMonths(1).atEndOfMonth()
Evitare juDate
Evitare le classi java.util.Date e .Calendar in bundle poiché sono notoriamente problematiche. Utilizzare invece lo java.time package in Java 8 e versioni successive.
java.time
La nuova java.time framework in Java 8 (Tutorial) ha i comandi per questo.
La classe con nome appropriato YearMonth
rappresenta un mese di un anno, senza un giorno o un'ora specifici. Da lì possiamo chiedere il primo e l'ultimo giorno del mese.
ZonedId zoneId = ZoneId.of("America/Montreal");
YearMonth yearMonthNow = YearMonth.now(zoneId);
YearMonth yearMonthPrevious = yearMonthNow.minusMonths(1);
LocalDate firstOfMonth = yearMonthPrevious.atDay(1);
LocalDate lastOfMonth = yearMonthPrevious.atEndOfMonth();
Joda Time
UPDATE: Il progetto Joda-Time è ora in maintenance mode, con il team di consulenza di migrazione alle java.time classi. Vedi Tutorial by Oracle.
In Joda-Time 2.8, utilizzare la classe LocalDate
se non si cura dell'ora.
LocalDate today = LocalDate.now(DateTimeZone.forID("Europe/Paris"));
LocalDate firstOfThisMonth = today.withDayOfMonth(1);
LocalDate firstOfLastMonth = firstOfThisMonth.minusMonths(1);
LocalDate endOfLastMonth = firstOfThisMonth.minusDays(1);
fonte
2014-09-01 07:55:11
+1 e OP vuole anche avere ultima data del mese precedente –
Le classi mezzanotte e metodi su Joda-Time sono stati deprecati. Usa il metodo 'withTimeAtStartOfDay'. –
FYI, il progetto [Joda-Time] (http://www.joda.org/joda-time/) è ora in [modalità manutenzione] (https://en.wikipedia.org/wiki/Maintenance_mode), con il team che consiglia la migrazione alle classi [java.time] (http://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html). Vedi [Tutorial di Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –