El pozo del calendario de Nochevieja en Java

Código anterior:

    public static void main(String[] args) throws Exception{
    
    

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");

        Calendar calendar = Calendar.getInstance();

        calendar.setTime(simpleDateFormat.parse("2021-08"));

        calendar.roll(Calendar.MONTH, -5);

        String date = simpleDateFormat.format(calendar.getTime());

        System.out.println("-------------" + date + "-------------");
    }

resultado de la operación

-------------2021-03-------------

Se puede observar que la fecha que se obtiene restando 5 meses no es problema, pero sí hay problema al restar más de un año, y luego intentar restar 20 meses.

    public static void main(String[] args) throws Exception{
    
    

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");

        Calendar calendar = Calendar.getInstance();

        calendar.setTime(simpleDateFormat.parse("2021-08"));

        calendar.roll(Calendar.MONTH, -20);

        String date = simpleDateFormat.format(calendar.getTime());
        
        System.out.println("-------------" + date + "-------------");
    }

resultado de la operación

-------------2021-12-------------

La fecha es incorrecta, la fecha correcta debería ser: 2019-12

Solución: reemplace el método roll con add, el método roll solo se puede calcular en el año actual y el método add se puede calcular entre años

    public static void main(String[] args) throws Exception {
    
    

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");

        Calendar calendar = Calendar.getInstance();

        calendar.setTime(simpleDateFormat.parse("2021-08"));

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

        String date = simpleDateFormat.format(calendar.getTime());

        System.out.println("-------------" + date + "-------------");
    }

resultado de la operación

-------------2019-12-------------

Supongo que te gusta

Origin blog.csdn.net/qq_39486119/article/details/119653514
Recomendado
Clasificación