Как получить предыдущие месяц и годы в java?

Как узнать последний месяц и его год в java

например, если сегодня 10 октября 2012 года, результат должен быть месяц = 9 и Год = 2012, Если сегодня 10 января 2013 года, результат должен быть месяц = 12 Год = 2012

9 ответов


решение здесь но вместо сложения вам нужно использовать вычитание

c.add(Calendar.MONTH, -1);

затем вы можете позвонить геттер на Calendar чтобы получить правильные поля

int month = c.get(Calendar.MONTH) + 1; // beware of month indexing from zero
int year  = c.get(Calendar.YEAR);

java.время

используя java.time фреймворк, встроенный в 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 января, а 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);

private static String getPreviousMonthDate(Date date){
    final SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy");

    Calendar cal = Calendar.getInstance();  
    cal.setTime(date);  
    cal.set(Calendar.DAY_OF_MONTH, 1);  
    cal.add(Calendar.DATE, -1);

    Date preMonthDate = cal.getTime();  
    return format.format(preMonthDate);
}


private static String getPreToPreMonthDate(Date date){
    final SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy");

    Calendar cal = Calendar.getInstance();  
    cal.setTime(date);  
    cal.add(Calendar.MONTH, -1);  
    cal.set(Calendar.DAY_OF_MONTH,1);  
    cal.add(Calendar.DATE, -1);  

    Date preToPreMonthDate = cal.getTime();  
    return format.format(preToPreMonthDate);
}

Я думаю, это сработает.. :)

import java.util.Calendar;

public class Main {

  public static void main(String[] args) {
    Calendar now = Calendar.getInstance();
    System.out.println("Current date : " + (now.get(Calendar.MONTH) + 1) + "-"
        + now.get(Calendar.DATE) + "-" + now.get(Calendar.YEAR)); //Current Date

    now = Calendar.getInstance();
    now.add(Calendar.MONTH, -1); // Decrement Month by 1

if((now.get(Calendar.MONTH) + 1)==0){ //Checks if Month is January and Decrements Year by 1 and increments Month by 11
    now.add(Calendar.MONTH, 11);
    now.add(Calendar.YEAR, -1);
  }
    System.out.println("date before 1 months : " + (now.get(Calendar.MONTH) + 1) + "-"
        + now.get(Calendar.DATE) + "-" + now.get(Calendar.YEAR)); // Drecemented Date
  }
}

вот фрагмент кода.Я думаю, это работает.

      Calendar cal = Calendar.getInstance();
      SimpleDateFormat simpleMonth=new SimpleDateFormat("MMMM YYYY");
      cal.add(Calendar.MONTH, -1);
      System.out.println(simpleMonth.format(prevcal.getTime()));