怎么把string 2019-03-29T10:45-05:00 [America / Chicago]转换成localdate?

时间:2019-03-01 23:45:25

标签: java formatter 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,但出现了错误:

  

文本'2019-03-29T10:45-05:00 [America / Chicago]'无法解析,未解析的文本位于索引10

我只希望以yyyy-MM-dd格式的日期不希望获得分钟,秒,时区等信息……

2 个答案:

答案 0 :(得分:1)

这应该足够了。请注意,我将完整日期 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);

答案 1 :(得分:1)

ZonedDateTime.parse( … ).toLocalDate

您的输入字符串为标准ISO 8601格式,但已扩展为将时区的名称附加在方括号中。此扩展格式正是ZonedDateTime类中默认使用的格式。

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

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

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