如何在java中将空字符串转换为LocalDate?

时间:2017-06-01 08:54:06

标签: java exception java-8

我需要将空字符串转换为LocalDate对象。我尝试使用

LocalDate.parse("");

但有例外说:

java.time.format.DateTimeParseException: Text '' could not be parsed at index 0

有人可以帮助我。

3 个答案:

答案 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);
}