variable tipo para operaciones metodos meses ingresar hora gregorian fechas fecha ejemplo declarar dato con clase año java calendar simpledateformat

tipo - operaciones con fechas en java



Simpledateformat: ¿Por qué Calendar.MONTH genera incorrectamente el valor del mes anterior(es decir, diciembre de 2015) para enero de 2016? (2)

He estado tratando de obtener los valores de los últimos 12 meses del mes actual, usando Simpledateformat. Pero para el mes anterior (es decir, diciembre de 2015) siempre recibo diciembre de 2016.

calendar.set (Calendar.MONTH, -1); Se supone que volverá en diciembre de 2015, pero no es así.

No entiendo la lógica. ¿Podría alguien explicar por favor? Muchas gracias por su tiempo y ayuda.

Mi código:

public static void main (String[] args) throws java.lang.Exception { SimpleDateFormat month_date = new SimpleDateFormat("MMM-YYYY"); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MONTH, -1); String month_name = month_date.format(calendar.getTime()); System.out.println("month_name : "+month_name); }

Salida:

month_name : Dec-2016


Hay un par de problemas con el código.

1) Debe usar add calendar.add(Calendar.MONTH, -1); para restar el mes.

2) Curiosamente, después de eso también imprimirá el resultado como month_name : Dec-2016 esto se debe a que SimpleDateFormat tiene un problema, es decir, ha mencionado el año como el capital Y que es el Week year cambia a y hará el trabajo.

Puede SimpleDateFormat documentación de SimpleDateFormat aquí.

El código modificado será:

public static void main (String[] args) throws java.lang.Exception { SimpleDateFormat month_date = new SimpleDateFormat("MMM-yyyy"); Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.MONTH, -1); String month_name = month_date.format(calendar.getTime()); System.out.println("month_name : "+month_name); }


Para subestimar los meses, puedes hacer esto:

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

Espero que te ayude