Java проблема парсинга даты — java парсер дата

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд
Загрузка...

Вопрос:


Решаю задачу парсинга вакансий с сайта 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];
}

Автор вопроса: Sam Kilanoff

Sam Kilanoff

в этом вопросе обсуждалась обратная проблема —
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];

}

Источник

Вам также может быть интересно:

Drag and Drop UWP — c# xaml mvvm
Вопрос: Нужно иметь возможность добавлять изображения в приложение путем перетаскивания из файловой системы У Grid включил AllowDrop. Но как добавить перетаскиваемые изображения в коллекцию? Т.к. те ...
Растягивание Высоты , Резина — html css html5
Вопрос: Здравствуйте! Реализовал резиновый дизайн. Растягивается ширина, но длина по % не растягивается. Возможно ли это реализовать? Или так и задумано, растягивание только на ширину ...
Jquery position().left Как быть на мобильниках? — javascript jquery css
Вопрос: На мобильных устройствах, если зумишь экран, position всегда разный. $('g').position().left Как сделать так, чтобы он не менял свои значения? Автор вопроса: ...
Jquery position().left Как быть на мобильниках? — javascript jquery css
Вопрос: На мобильных устройствах, если зумишь экран, position всегда разный. $('g').position().left Как сделать так, чтобы он не менял свои значения? Автор вопроса: ...
requestAnimation и очередность отрисовки — javascript canvas
Вопрос: Здравствуйте! Реализовал 2D игру и в Edge работает все плавно и круто, но в Firefox'e подвисает, сказали, что нужно сделать, чтобы раз-два момент и все ...
Контекстное/всплывающее меню в Android — java android popup
Вопрос: Есть ли техническая возможность сделать приложение, добавляющее свое контекстное или всплывающее меню в любом месте системы? Хочу, чтобы при выделении любого текста появлялась дополнительная кнопка ...
Контекстное/всплывающее меню в Android — java android popup
Вопрос: Есть ли техническая возможность сделать приложение, добавляющее свое контекстное или всплывающее меню в любом месте системы? Хочу, чтобы при выделении любого текста появлялась дополнительная кнопка ...
Завершить службы циклом — c# windows-service
Вопрос: Можно ли остановить службы циклом? У меня есть список служб, занёс их в List List<string> name = new List<string> { "AdobeARMservice", "RemoteRegistry", "TermService", "Messenger", "SSDPSRV", ...
Завершить службы циклом — c# windows-service
Вопрос: Можно ли остановить службы циклом? У меня есть список служб, занёс их в List List<string> name = new List<string> { "AdobeARMservice", "RemoteRegistry", "TermService", "Messenger", "SSDPSRV", ...
RecyclerView — разная разметка — android recyclerview
Вопрос: Смотрел, я смотрел в сторону RecyclerView и наконец решил кинуть ListView и на тебе! В "плохом прошлом" мой ListView использовался для двух разметок. Сейчас я ...
RecyclerView — разная разметка — android recyclerview
Вопрос: Смотрел, я смотрел в сторону RecyclerView и наконец решил кинуть ListView и на тебе! В "плохом прошлом" мой ListView использовался для двух разметок. Сейчас я ...
Как правильно передать массив аргументом для пользовательской функции — php
Вопрос: Если не брать в функцию все это, тогда результат работает. А если вот так в функции все выполнять, тогда PHP ругается: «Invalid ...
Как правильно передать массив аргументом для пользовательской функции — php
Вопрос: Если не брать в функцию все это, тогда результат работает. А если вот так в функции все выполнять, тогда PHP ругается: «Invalid ...
ViewPager внутри ViewPager — такие матрешки работают? — android viewpager
Вопрос: Доброго времени суток. Назрела новая задача. Есть каталог мастеров. При выборе конкретного мастера открывается его страница (активити с ViewPager), и теперь мастеров можно перелистывать свайпом. ...
Почему id всегда 1 Yii2 — yii авторизация
Вопрос: Использую все как по документации. Для получения информации о пользователе использую $identity = $model->findOne(]); И каким бы не был email, id пользователя всегда ...

Оставьте ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *