ParseException:Java中不可解析的日期

ParseException:Java中不可解析的日期,java,parsing,java-time,Java,Parsing,Java Time,我需要将日期格式的字符串转换为时间戳 起初我喜欢这样 private Timestamp dateConverter(String date) { Timestamp timestamp = null; SimpleDateFormat dateFormat = new SimpleDateFormat("dd MMM yyyy HH:mm"); Date parsedDate = null; try { parsedDate = dateForm

我需要将日期格式的字符串转换为时间戳

起初我喜欢这样

private Timestamp dateConverter(String date) {
    Timestamp timestamp = null;
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd MMM yyyy HH:mm");
    Date parsedDate = null;
    try {
        parsedDate = dateFormat.parse(date);
        timestamp = new java.sql.Timestamp(parsedDate.getTime());
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return timestamp;
}
结果是:ParseException:不可解析日期:2020年1月16日11:02

我试过另一种方法:

private Timestamp dateConverter(String date) {
    DateTimeFormatter f = DateTimeFormatter.ofPattern("dd MMM yyyy HH:mm");
    LocalDateTime ldt = LocalDateTime.parse(date , f);

    return Timestamp.valueOf(ldt);
}

此时,我出现了DateTimeParseException的内部服务器错误:无法在索引3处解析文本“16 Jan 2020 11:02”

您的模式无法知道您月份的语言是什么,英语、法语、阿拉伯语、俄语、普通话……,要解决此问题,您必须通过使用区域设置帮助格式化程序,如下所示:

DateTimeFormatter f = DateTimeFormatter.ofPattern("dd MMM yyyy HH:mm")
                .withLocale(new Locale("us")); 
LocalDateTime ldt = LocalDateTime.parse("16 Jan 2020 11:02" , f); // 2020-01-16T11:02

您的模式无法知道您所在月份的语言是什么,英语、法语、阿拉伯语、俄语、普通话……,要解决此问题,您必须使用区域设置帮助格式化程序,如下所示:

DateTimeFormatter f = DateTimeFormatter.ofPattern("dd MMM yyyy HH:mm")
                .withLocale(new Locale("us")); 
LocalDateTime ldt = LocalDateTime.parse("16 Jan 2020 11:02" , f); // 2020-01-16T11:02
我建议您不要使用SimpleDateFormat、日期和时间戳。这些类设计得很糟糕,而且早已过时,第一个类尤其令人讨厌。而是使用LocalDateTime和DateTimeFormatter,两者都来自,就像在您的第二个代码片段中一样。我建议您不要使用SimpleDateFormat、Date和Timestamp。这些类设计得很糟糕,而且早已过时,第一个类尤其令人讨厌。而是使用LocalDateTime和DateTimeFormatter,两者都来自,就像在第二个代码段中一样。