如何在Java中从String中正确解析到LocalDate?

时间:2017-12-10 13:45:51

标签: java date string-parsing localdate

我遇到了一个奇怪的问题。我无法将字符串值解析为LocalDate。问题是在运行时我在断点处暂停并在evaluate表达式工具中执行解析并且它可以工作。但后来我继续申请,我得到了下一个条款的例外:

  

引起:java.time.format.DateTimeParseException:Text' -218906870-0-9088-15635'无法在索引11处解析       at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)       at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)       at java.time.LocalDate.parse(LocalDate.java:400)       在com.library.controller.CrudController.returnBook(CrudController.java:96)       ......还有55个

我的代码在这里

LocalDate date = returnDatePicker.getValue();
    Journal item = (Journal) tableView.getSelectionModel().getSelectedItem();
    if(date != null && item != null) {
        LocalDate itemDate = LocalDate.parse(item.getStartDate().toString());
        if (date.isAfter(itemDate)) {
            journalDao.saveOrUpdate(item.withReturnDate(date));
            returnPanel.setDisable(true);
            fillJournal();
        }
    }

字符串值中的日期类似于" 2017-12-30"。 一些截图: When I evaluate expression I get correct result

怎么可能呢?它适用于评估,并且不在运行时。 如果你给我一些提示,我将非常感激。

1 个答案:

答案 0 :(得分:2)

java.util.Date投射到String,然后将该字符串解析为LocalDate可能不是将Date转换为LocalDate的最佳方法

尝试以下内容(更详细地解释here)并查看是否可以解决您的问题:

Date startDate = item.getStartDate();
ZoneId zoneId = ZoneId.systemDefault(); // Or ZoneId.of( "Europe/Moscow" ) etc.
LocalDate itemDate = startDate.toInstant().atZone( zoneId ).toLocalDate();