我遇到了一个奇怪的问题。我无法将字符串值解析为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"。 一些截图:
怎么可能呢?它适用于评估,并且不在运行时。 如果你给我一些提示,我将非常感激。
答案 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();