Смена формата даты 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();
}
}