如何从 Java 中的字符串正确解析为 LocalDate?
How to correctly parse to LocalDate from String in Java?
我遇到了一个奇怪的问题。我无法将字符串值解析为 LocalDate。问题是在运行时我在断点处暂停并在评估表达式工具中执行解析并且它有效。但后来我继续申请,我得到了下一个条款的例外:
Caused by: java.time.format.DateTimeParseException: Text '-218906870-0-9088-15635' could not be parsed at index 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)
at com.library.controller.CrudController.returnBook(CrudController.java:96)
... 55 more
我的代码在这里
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”。
一些截图:
这怎么可能?它在评估中有效,在运行时无效。
如果您能给我一些提示,我将不胜感激。
将 java.util.Date
转换为 String
然后将该字符串解析为 LocalDate
可能不是将 Date
转换为 [=13] 的最佳方式=].
尝试以下方法(更详细地解释 here),看看是否能解决您的问题:
Date startDate = item.getStartDate();
ZoneId zoneId = ZoneId.systemDefault(); // Or ZoneId.of( "Europe/Moscow" ) etc.
LocalDate itemDate = startDate.toInstant().atZone( zoneId ).toLocalDate();
我遇到了一个奇怪的问题。我无法将字符串值解析为 LocalDate。问题是在运行时我在断点处暂停并在评估表达式工具中执行解析并且它有效。但后来我继续申请,我得到了下一个条款的例外:
Caused by: java.time.format.DateTimeParseException: Text '-218906870-0-9088-15635' could not be parsed at index 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) at com.library.controller.CrudController.returnBook(CrudController.java:96) ... 55 more
我的代码在这里
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”。
一些截图:
这怎么可能?它在评估中有效,在运行时无效。 如果您能给我一些提示,我将不胜感激。
将 java.util.Date
转换为 String
然后将该字符串解析为 LocalDate
可能不是将 Date
转换为 [=13] 的最佳方式=].
尝试以下方法(更详细地解释 here),看看是否能解决您的问题:
Date startDate = item.getStartDate();
ZoneId zoneId = ZoneId.systemDefault(); // Or ZoneId.of( "Europe/Moscow" ) etc.
LocalDate itemDate = startDate.toInstant().atZone( zoneId ).toLocalDate();