Не преобразуется строка в дату с сокращенным месяцем в русской локали
Есть строка вида "7-дек-2019 22:33:17.345". При попытке перевести в дату получаю ошибку:
java.text.ParseException: Unparseable date: "7-???-2019 22:33:17.345"
Мой код следующий:
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss.SSS", new Locale("ru"));
String dateInString = "7-дек-2019 22:33:17.345";
Date date = formatter.parse(dateInString);
System.out.println(date.getMonth());
Когда я пишу месяц полностью "декабрь" все работает. Для английской локали тоже работает с сокращением JAN напримерю Как парсить даты с сокращением в месяце? А также можно ли сделать чтобы парсило и так и так, т.е. "дек" и "декабрь" чтобы обрабатывалось одинаково правильно. У меня данные по разному приходят.
Ответы (1 шт):
Используйте класс DateFormatSymbols, в экземпляр которого передаете массив сокращенных названий месяцев, сохраняя порядок следования.
DateFormatSymbols symbols = new DateFormatSymbols(new Locale("ru"));
String[] shortestMonths = new String[] {"янв", "фев", "мар", "апр", "май", "июн", "июл", "авг", "сен", "окт", "ноя", "дек"};
symbols.setShortMonths(shortestMonths);
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss.SSS", symbols);
String dateInString = "7-дек-2019 22:33:17.345";
Date date = formatter.parse(dateInString);
System.out.println(date.getMonth() + 1);
Код набросал быстро и не тестировал, но в теории должно все заработать.
В конце нужно добавить +1, потому что месяцы в классе Calendar начинаются с 0