我需要将空字符串转换为LocalDate对象。我尝试使用
LocalDate.parse("");
但有例外说:
java.time.format.DateTimeParseException: Text '' could not be parsed at index 0
有人可以帮助我。
答案 0 :(得分:4)
转换后你期望得到什么? 如果您需要当前时间,您应该使用:
LocalDate.now()
迭代列表时 - 添加一个if
语句来检查String
是否为null / empty,甚至检查是否可以解析 - 如果没有 - 处理它,例如return null / throw异常/返回LocalDate.now()
或执行您需要的任何其他操作。
如果您使用的是java8,则可以过滤非空/ null字符串,如
list
.stream()
.filter(str-> str!=null && !str.isEmpty())
//and you can collect values to list if you need
.map(LocalDate::parse)
.collect(Collectors.toList());
答案 1 :(得分:2)
异常是正确的行为。空字符串不是有效日期。如果您的应用程序的要求没有说允许空字符串,那么您将此视为错误。捕获异常并将其报告为错误,就像您可能会处理"fish"
或其他一些无意义的值一样。
另一方面,如果你想在一个空字符串“作为日期”放置一些特定的含义,那么做这样的事情:
if (str.isEmpty()) {
date = /* ... whatever an empty string means as a date */
} else {
date = LocalDate.parse(str);
}
或
if (str.isEmpty()) {
date = null; /* or a "null object" per the NullObject pattern,
or use an Optional. */
} else {
date = LocalDate.parse(str);
}
换句话说,在尝试解析日期之前,请测试空字符串的特殊情况。同样的方法可能会用于其他字符串,例如"now
“或"yesterday"
。
答案 2 :(得分:0)
import org.apache.commons.lang3.StringUtils;
import java.time.LocalDate;
LocalDate parsedDate = parseDate("2016-08-16"); // you can also enter an empty string
private LocalDate parseDate(final String dateAsString) {
if (StringUtils.isEmpty(dateAsString)) { //isEmpty() will check if the string is empty or null
return null; // here you can return the current date as well with LocalDate.now();
}
//default, ISO_LOCAL_DATE
return LocalDate.parse(dateAsString);
}