如何将字符串 2019-03-29T10:45-05:00[America/Chicago] 转换为本地日期?

How to convert string 2019-03-29T10:45-05:00[America/Chicago] to localdate?

selectedStart = "2019-03-29T10:45-05:00[America/Chicago]";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate parsedDate = LocalDate.parse(selectedStart, formatter);

我从表视图行中获取 selectedStart 字符串并尝试将其转换为 LocalDate 但出现错误:

Text '2019-03-29T10:45-05:00[America/Chicago]' could not be parsed, unparsed text found at index 10

我只想要 yyyy-MM-dd 格式的日期,不想获取分钟、秒、时区等...

这应该足够了。请注意,我在第一个转换中使用了完整日期 pattern,这是必需的(parse 会抛出 DateTimeParseException)。

final String selectedStart = "2019-03-29T10:45-05:00[America/Chicago]";
final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mmXXX'['VV']'");
final LocalDate parsedDate = LocalDate.parse(selectedStart, formatter);

ZonedDateTime.parse( … ).toLocalDate

您输入的字符串采用标准 ISO 8601 格式,但经过扩展以在方括号中附加时区名称。这种扩展格式正是 ZonedDateTime class.

中默认使用的格式
ZonedDateTime.parse( "2019-03-29T10:45-05:00[America/Chicago]" ) 

如果您只需要没有时间和时区的日期,则从中提取 LocalDate

LocalDate ld = 
    ZonedDateTime.parse( "2019-03-29T10:45-05:00[America/Chicago]" )
                 .toLocalDate() ;