¿Cómo obtener meses y años anteriores en Java?

¿Cómo averiguo el último mes y su año en java?

por ejemplo, si hoy es 10 de octubre de 2012, el resultado debería ser Mes = 9 y año = 2012, Si hoy es 10 de enero de 2013, el resultado debería ser Mes = 12 y año = 2012

Su solución está aquí, pero en lugar de agregar, necesita usar la resta

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

Luego puede llamar a getter en el Calendar para adquirir campos apropiados

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

java.time

Usando el marco java.time integrado en 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 

Use la Biblioteca de tiempo Joda . Es muy fácil manejar la fecha, la hora, el calendario y la configuración regional con él, y se integrará a java en la versión 8.

DateTime#minusMonths método DateTime#minusMonths lo ayudaría a obtener el mes anterior.

 DateTime month = new DateTime().minusMonths (1); 

puede usar la clase Calendario para hacerlo:

 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())); 

Esto imprime: 2012.09.10 11:01 para la fecha real 2012.10.10 11:01

El enfoque más simple y menos propenso a errores es … Usar el método roll () de Calendar. Me gusta esto:

  c.roll(Calendar.MONTH, false); 

el método roll toma un valor booleano, que básicamente significa tirar el mes hacia arriba (verdadero) o hacia abajo (falso)?

Debes tener en cuenta que el mes es cero, por lo que cuando hagas el getMonth necesitarás agregar 1. En el ejemplo a continuación tenemos que agregar 1 a Januaray como 1 y no como 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); } 

Creo que esto funcionará … 🙂

 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 } } 

Aquí está el fragmento de código. Creo que funciona.

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