Смена формата даты Java

Пытаюсь конвертировать формат yyyy-mm-dd в yyyy-dd-MMM (например 2021-05-06 в 2021-06-May).

Но почему-то любой месяц конвертируется в Jan. Что тут не так?

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Main {
    private static SimpleDateFormat inSDF = new SimpleDateFormat("yyyy-mm-dd");
    private static SimpleDateFormat outSDF = new SimpleDateFormat("yyyy-dd-MMM");

    public static void main(String[] args) {

        String outDate = "";
        String inDate = "2021-05-06";

        try {
            Date date = inSDF.parse(inDate);
            outDate = outSDF.format(date);
        } catch (ParseException ex) {
        }
    }
}

Ответы (2 шт):

Автор решения: Alexandr

У Вас задан паттерн yyyy-mm-dd, где mm - это минуты. Вам нужно указать MM, т.е. yyyy-MM-dd.

→ Ссылка
Автор решения: Artur Vartanyan

Необходимо в Вашем случае самую малость подправить вывод отформатированной даты через pattern.

Предлагаю взглянуть в сторону класса DateTimeFormatter.

У Вас должно получиться следующее:

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;

public class Main {

    /**
     * Паттрен для форматирования
     */
    public final static DateTimeFormatter DAY_MONTH_YEAR = DateTimeFormatter.ofPattern("dd.MM.yyyy");

    public static void main(String[] args) {

        LocalDateTime localDateTime = convertDateToLocalDateTime(new Date());
        System.out.println(formatLocalDate(localDateTime));
    }

    /**
     * Метод отформатирует LocalDateTime по заданному паттерну выше.
     *
     * @param localDateTime - входной параметр времени
     * @return - отформатированная по патерну дата
     */
    public static String formatLocalDate(LocalDateTime localDateTime) {
        return localDateTime.format(DAY_MONTH_YEAR);
    }

    /**
     * Простую дату конвертируем в LocalDateTime
     *
     * @param date - входная простая дата из класса Date
     * @return - date -> localDateTime
     */
    public static LocalDateTime convertDateToLocalDateTime(Date date) {
        if (date == null)
            return null;
        return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
    }
}
→ Ссылка