Java jsoup日期解析异常

时间:2018-04-01 13:42:13

标签: java date parsing jsoup

我试图使用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);
}

更新已解决。

我通过拆分输入参数来改变了covertDate方法:

    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];
}

1 个答案:

答案 0 :(得分:1)

<强>解决方案

我通过拆分输入参数来改变了covertDate方法:

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];

}