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

如何在java中将空字符串转换为LocalDate?,java,exception,java-8,Java,Exception,Java 8,我需要将空字符串转换为LocalDate对象。我试着用 LocalDate.parse(""); 但有一个例外是: java.time.format.DateTimeParseException: Text '' could not be parsed at index 0 有人能帮我一下吗。经过这样的转换,你希望得到什么? 如果您需要当前时间,应使用: LocalDate.now() 迭代列表时-添加一个if语句,检查字符串是否为NOTNULL/empty,甚至检查是否可以解析它-如果否

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

LocalDate.parse("");
但有一个例外是:

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

有人能帮我一下吗。

经过这样的转换,你希望得到什么? 如果您需要当前时间,应使用:

LocalDate.now()
迭代列表时-添加一个
if
语句,检查
字符串是否为NOTNULL/empty,甚至检查是否可以解析它-如果否-处理它,例如返回null/抛出异常/返回
LocalDate.now()
,或者执行任何其他需要的操作

如果您使用的是java8,那么您可以过滤非空/空字符串,如

list
.stream()
.filter(str-> str!=null && !str.isEmpty())
//and you can collect values to list if you need
.map(LocalDate::parse)
.collect(Collectors.toList());

异常是正确的行为。空字符串不是有效的日期。如果应用程序的要求没有说明允许使用空字符串,则将其视为错误。捕获异常并将其报告为错误,就像处理
“fish”
或其他一些无意义的值一样

另一方面,如果您想将某个特定含义放在空字符串上“作为日期”,请执行以下操作:

if (str.isEmpty()) {
    date = /* ... whatever an empty string means as a date */
} else {
    date = LocalDate.parse(str);
}


换句话说,在您尝试解析日期之前,先测试空字符串的特殊情况。同样的方法也可以用于其他字符串,如
“now
”或
“Dayed”

,以及您希望从空字符串中获取的日期?为什么需要从空字符串中解析
LocalDate
?空字符串并不表示任何日期,因此正如您所看到的,这种[幼稚的]方法不起作用。对于空字符串,您希望得到什么结果?空字符串不能是日期,我不理解为什么有人需要空字符串作为日期。只需使用
str.isEmpty()检查字符串是否为空即可
LocalDate.now()将为服务器提供时间。但是如果我需要获得某个国家的当前日期,我将如何获得它?。我这样问是因为,我有一个使用LocalDate.now()的代码,它被部署到印度的一个服务器上。但是一个来自中国的用户访问该代码,他将获得印度时间。如何获取中国时间?您可以传递用户的时区LocalDate.now(ZoneId.of(“someTimeZone”)),但您应该从用户的浏览器接收它。实际上,您应该将所有内容都保存在一个时区(服务器/UTC),如果您想为用户调整时区,应该通过浏览器javascript等方式在UI上显示,我已经修复了它。我从UI获取时区并将其传递到后端。var dateVar=新日期();var timezone=dateVar.getTimezoneOffset()/60*(-1);这将提供时区表单ui。
if (str.isEmpty()) {
    date = null;  /* or a "null object" per the NullObject pattern,
                     or use an Optional. */
} else {
    date = LocalDate.parse(str);
}
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);
}