Т.Л., д-р
YearMonth.now().minusMonths(1).atDay(1)
... и ...
YearMonth.now().minusMonths(1).atEndOfMonth()
Избегайте juDate
Избегайте связанных классов java.util.Date и .Calendar, поскольку они, как известно, являются хлопотными. Вместо этого используйте java.time package в Java 8 и более поздних версиях.
java.time
Новый java.time framework в Java 8 (Tutorial) есть команды для этого.
Класс aptly-name YearMonth
представляет собой месяц года без какого-либо определенного дня или времени. Оттуда мы можем попросить первый и последний дни месяца.
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 времени
UPDATE: Проект Joda-Time теперь в maintenance mode с командой советуя миграции в java.time классов. См. Tutorial by Oracle.
В Joda-Time 2.8 используйте класс LocalDate
, если вы не заботитесь о времени суток.
LocalDate today = LocalDate.now(DateTimeZone.forID("Europe/Paris"));
LocalDate firstOfThisMonth = today.withDayOfMonth(1);
LocalDate firstOfLastMonth = firstOfThisMonth.minusMonths(1);
LocalDate endOfLastMonth = firstOfThisMonth.minusDays(1);
+1 и OP также хочет иметь последнюю дату предыдущего месяца –
классы полуночи и методы по Joda-времени устарели. Используйте метод 'withTimeAtStartOfDay'. –
FYI, проект [Joda-Time] (http://www.joda.org/joda-time/) теперь находится в [режиме обслуживания] (https://en.wikipedia.org/wiki/Maintenance_mode), с команда, предлагающая перейти на классы [java.time] (http://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html). См. [Учебное пособие по Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –