Как узнать последний месяц и его год в Java?
например Если сегодня 10 октября 2012 г., результат должен быть Month = 9
и Year = 2012
. Если сегодня 10 января 2013 г., результат должен быть Month = 12
и Year = 2012
.
Как узнать последний месяц и его год в Java?
например Если сегодня 10 октября 2012 г., результат должен быть Month = 9
и Year = 2012
. Если сегодня 10 января 2013 г., результат должен быть Month = 12
и Year = 2012
.
Ваше решение здесь, но вместо добавления вам нужно использовать вычитание
c.add(Calendar.MONTH, -1);
Затем вы можете вызвать getter на Calendar
для получения правильных полей
int month = c.get(Calendar.MONTH) + 1; // beware of month indexing from zero
int year = c.get(Calendar.YEAR);
Использование java.time
framework, встроенного в Java 8:
import java.time.LocalDate;
LocalDate now = LocalDate.now(); // 2015-11-24
LocalDate earlier = now.minusMonths(1); // 2015-10-24
earlier.getMonth(); // java.time.Month = OCTOBER
earlier.getMonth.getValue(); // 10
earlier.getYear(); // 2015
Используйте библиотеку времени Joda. С ним очень легко обрабатывать дату, время, календарь и локаль, и он будет интегрирован в java в версии 8.
Метод DateTime#minusMonths
поможет вам получить предыдущий месяц.
DateTime month = new DateTime().minusMonths (1);
вы можете использовать класс Calendar для этого:
SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -1);
System.out.println(format.format(cal.getTime()));
Это печатает: 2012.09.10 11:01
для фактической даты 2012.10.10 11:01
Самый простой и наименее подверженный ошибкам подход... Используйте метод roll() календаря. Как это:
c.roll(Calendar.MONTH, false);
метод roll принимает логическое значение, что в основном означает свертывание месяца вверх (true) или вниз (false)?
Вы должны знать, что месяц основан на нуле, поэтому, когда вы выполняете getMonth, вам нужно будет добавить 1. В приведенном ниже примере мы должны добавить 1 к Januaray как 1, а не 0
Calendar c = Calendar.getInstance();
c.set(2011, 2, 1);
c.add(Calendar.MONTH, -1);
int month = c.get(Calendar.MONTH) + 1;
assertEquals(1, month);
YearMonth
классВы можете использовать java.time.YearMonth
и его minusMonths
.
YearMonth lastMonth = YearMonth.now().minusMonths(1);
Вызов toString
дает вам вывод в стандартном формате ISO 8601: yyyy-mm
Вы можете получить доступ к частям, году и месяцу. Вы можете использовать Month
перечисляемый объект или просто int
значение 1-12 для месяца.
int year = lastMonth.getYear() ;
int month = lastMonth.getMonthValue() ;
Month monthEnum = lastMonth.getMonth() ;
Вот фрагмент кода. Думаю, он работает.
Calendar cal = Calendar.getInstance();
SimpleDateFormat simpleMonth=new SimpleDateFormat("MMMM YYYY");
cal.add(Calendar.MONTH, -1);
System.out.println(simpleMonth.format(prevcal.getTime()));
java.util.Calendar
. Или упростите себе жизнь с помощью Joda Time. - person Jesper   schedule 10.10.2012Calendar
. Этот класс плохо спроектирован и давно устарел. Вместо этого используйтеYearMonth
илиLocalDate
из java.time, современного API даты и времени Java. . - person Ole V.V.   schedule 02.03.2019