将String转换为java.time.localDate

时间:2018-07-11 15:18:39

标签: java

1.way

    LocalDate ld = LocalDate.parse(reservationDTO.getReservationDate());

2.way

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    LocalDate dateTime = LocalDate.parse(reservationDTO.getReservationDate(), 
    formatter);

3.way

LocalDate localDate = LocalDate.parse(reservationDTO.getReservationDate());

我尝试将String转换为java.time.localDate,但是对于这3种方式,我有错误

java.time.format.DateTimeParseException: Text '2018-7-11' could not be parsed at index 5

4 个答案:

答案 0 :(得分:2)

请注意此行

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");

特殊格式yyyy-MM-dd

您配置为传递日期格式为每年4个字符,每月2个字符和2个日期的字符的格式日期。但是您每个月只传递1位数字。

所以您需要通过的是2018-07-11

答案 1 :(得分:1)

如果您无法更改reservationDTO.getReservationDate(),则只需使用一个M

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-M-dd");
LocalDate dateTime = LocalDate.parse(reservationDTO.getReservationDate(), 
formatter);

您可以在javadoc M/L中找到与7、07、7月,7月,J匹配的

否则,如果您可以更改reservationDTO.getReservationDate(),只需将2018-7-11转换为2018-07-11

答案 2 :(得分:0)

您尝试解析的日期字符串不正确。日期应为“ yyyy-MM-dd”,例如“ 2018-07-24”。您正在尝试解析字符串2018-7-24

答案 3 :(得分:0)

我认为这个例子可以解决你的问题。

 String startDateString1 = "06/27/2007";
    String startDateString2 = "2007-06-27";
    DateFormat df1 = new SimpleDateFormat("MM/dd/yyyy"); 
    DateFormat df2 = new SimpleDateFormat("yyyy-mm-dd"); 
    Date startDate1;
    Date startDate2;
    try {
        startDate1 = df1.parse(startDateString1);
        startDate2 = df2.parse(startDateString2);
        LocalDate localDate1 = DateTimeUtils.toLocalDate(startDate1);
        LocalDate localDate2 = DateTimeUtils.toLocalDate(startDate2);
        System.out.println("localDate1:" + localDate1);
        System.out.println("localDate2:" + localDate2);
        System.out.println("Result: " + localDate1.isBefore(localDate2));
    } catch (ParseException e) {
        e.printStackTrace();
    }