Упрощенный формат. Почему Calendar.MONTH неправильно генерирует значение предыдущего месяца (т.е. декабрь 2015 г.) для января'16?

Я пытался получить значения за последние 12 месяцев текущего месяца, используя Simpledateformat. Но за предыдущий месяц (т.е. декабрь 2015 года) я всегда получаю декабрь 2016 года.

calendar.set (Calendar.MONTH, -1); Это должно вернуться в декабре 2015 года, но это не так.

Я не понимаю логику. Может кто-нибудь объяснить, пожалуйста. Большое спасибо за ваше время и помощь.

Мой код:

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

}

Выход:

month_name : Dec-2016

2 ответа

Решение

Есть несколько проблем с кодом.

1) Вы должны использовать добавить calendar.add(Calendar.MONTH, -1); вычесть месяц.

2) Интересно, что после этого он также напечатал бы вывод как month_name : Dec-2016 это потому что ваш SimpleDateFormat есть проблема, т.е. вы упомянули год в качестве столицы Y который Week year меняя его на y сделаю работу.

Вы можете обратиться к SimpleDateFormat документация здесь.

Модифицированный код будет:

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

Чтобы выложить месяцы, вы можете сделать это:

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

Надеюсь, это поможет вам.

Другие вопросы по тегам