tl; dr
YearMonth.now().minusMonths(1).atDay(1)
... y ...
YearMonth.now().minusMonths(1).atEndOfMonth()
Evita juDate
Evite las clases incluidas java.util.Date y .Calendar ya que son notoriamente problemáticas. En su lugar, use java.time package en Java 8 y versiones posteriores.
java.time
El nuevo java.time framework en Java 8 (Tutorial) tiene comandos para esto.
La clase YearMonth
llamada con acierto representa un mes del año, sin ningún día o momento específico. Desde allí podemos solicitar el primer y último día del mes.
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
ACTUALIZACIÓN:Joda-Time El proyecto se encuentra ahora en maintenance mode, con el equipo de asesoramiento migración a los java.time clases. Ver .
En Joda-Time 2.8, utilice la clase LocalDate
si no le importa la hora del día.
LocalDate today = LocalDate.now(DateTimeZone.forID("Europe/Paris"));
LocalDate firstOfThisMonth = today.withDayOfMonth(1);
LocalDate firstOfLastMonth = firstOfThisMonth.minusMonths(1);
LocalDate endOfLastMonth = firstOfThisMonth.minusDays(1);
+1 y OP también quiere tener la última fecha del mes anterior –
Las clases media noche y métodos sobre Joda-Time están en desuso. Use el método 'withTimeAtStartOfDay'. –
Para su información, el proyecto [Joda-Time] (http://www.joda.org/joda-time/) está ahora en [modo de mantenimiento] (https://en.wikipedia.org/wiki/Maintenance_mode), con el equipo recomienda la migración a las clases [java.time] (http://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html). Consulte [Tutorial de Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –