Решаю задачу парсинга вакансий с сайта HeadeHunter при помощи jsoup и пытаюсь парсить дату, но получаю ошибку:
java.text.ParseException: Unparseable date: "1 апреля 2018"
at java.text.DateFormat.parse(DateFormat.java:366)
at ru.skilanov.io.jobsparser.HtmlParser.convertDate(HtmlParser.java:116)
at ru.skilanov.io.jobsparser.HtmlParser.getDate(HtmlParser.java:105)
at ru.skilanov.io.jobsparser.HtmlParser.createJob(HtmlParser.java:64)
at ru.skilanov.io.jobsparser.HtmlParser.getAllJobs(HtmlParser.java:53)
at ru.skilanov.io.jobsparser.HtmlParser.main(HtmlParser.java:45)
Код метода конвертации строки в дату:
private Date convertDate(String date){
Calendar calendar = Calendar.getInstance();
String year = String.valueOf(calendar.get(Calendar.YEAR));
String str = String.format("%s %s", date, year);
DateFormat format = new SimpleDateFormat("d MMMM yyyy", new Locale("ru", "RU"));
try {
return format.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
Код метода парсинга даты:
private Date getDate(Element element){
String date = element.select(DATE_QUERY).text();
return convertDate(date);
}
UPDATE Проблема решена, входящую строку date метода convertDate нужно было разбить на строки.
Метод convertDate(исправленный):
private Date convertDate(String date) {
Calendar calendar = Calendar.getInstance();
String year = String.valueOf(calendar.get(Calendar.YEAR));
String str = String.format("%s %s %s", getDay(date), getMonth(date), year);
DateFormat format = new SimpleDateFormat("d MMMM yyyy");
try {
return format.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
Метод getDay:
private String getDay(String date) {
return date.split("[\\u00A0\\s]+")[0];
}
Метод getMonth
private String getMonth(String date) {
return date.split("[\\u00A0\\s]+")[1];
}
в этом вопросе обсуждалась обратная проблема - stackoverflow
здесь упоминают установку своих текстовых констант для парсинга месяцев
Locale russian = new Locale("ru");
String[] newMonths = {
"января", "февраля", "марта", "апреля", "мая", "июня",
"июля", "августа", "сентября", "октября", "ноября", "декабря"};
DateFormatSymbols dfs = DateFormatSymbols.getInstance(russian);
dfs.setMonths(newMonths);
DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, russian);
SimpleDateFormat sdf = (SimpleDateFormat) df;
sdf.setDateFormatSymbols(dfs);
Решение
Метод convertDate(исправленный):
private Date convertDate(String date) {
Calendar calendar = Calendar.getInstance();
String year = String.valueOf(calendar.get(Calendar.YEAR));
String str = String.format("%s %s %s", getDay(date), getMonth(date), year);
DateFormat format = new SimpleDateFormat("d MMMM yyyy");
try {
return format.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
} Метод getDay:
private String getDay(String date) {
return date.split("[\\u00A0\\s]+")[0];
} Метод getMonth
private String getMonth(String date) {
return date.split("[\\u00A0\\s]+")[1];
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Нужно получить значение 3 в результате выполнения следующего кода: Systemout
Доброго времени суток!Я установил андроид студио и ява,но установить сдк не получается точнее интегрировать его в андроид сдкЯ нажимаю установить,он...