java.time.format.DateTimeParseException:Text';2018年5月13日&x27;无法在索引2处分析

java.time.format.DateTimeParseException:Text';2018年5月13日&x27;无法在索引2处分析,java,json,websocket,gson,datetime-format,Java,Json,Websocket,Gson,Datetime Format,我有一个websocket,它以JSON字符串的形式接收来自客户端的请求。我收到的一个请求包含日期。我正在以字符串的形式检索日期,但无法将其更改为LocalDate。这是我收到的JSON请求{“type”:“dataRequest”,“startDate”:“13.05.2018”,“endDate”:“20.05.2018”,“interval”:“01:01:01”} 我正在使用Google的GSON解析JSON 这是我用来获取日期作为字符串的Java代码,并将其解析为LocalDate p

我有一个
websocket
,它以
JSON
字符串的形式接收来自客户端的请求。我收到的一个请求包含日期。我正在以
字符串
的形式检索日期,但无法将其更改为LocalDate。这是我收到的
JSON
请求
{“type”:“dataRequest”,“startDate”:“13.05.2018”,“endDate”:“20.05.2018”,“interval”:“01:01:01”}

我正在使用
Google的GSON
解析
JSON

这是我用来获取日期作为字符串的
Java
代码,并将其解析为LocalDate

private List<LocalDate> getStartEndDate(String message){

        List<LocalDate> dates = new ArrayList();
        JsonObject obj = parseJson(message);
        JsonPrimitive date = obj.getAsJsonPrimitive("startDate");
        String dateString = date.toString();
        DateTimeFormatter formater = DateTimeFormatter.ofPattern("dd.MM.yyyy");
        dates.add(LocalDate.parse(dateString, formater));
        date = obj.getAsJsonPrimitive("endDate");
        dateString = date.getAsString();
        LocalDate end = LocalDate.parse(dateString, formater);
        dates.add(end);

        return dates;
    }
私有列表getStartEndDate(字符串消息){
列表日期=新建ArrayList();
JsonObject obj=parseJson(消息);
JsonPrimitive日期=obj.getAsJsonPrimitive(“startDate”);
字符串dateString=date.toString();
DateTimeFormatter Formatter=模式的DateTimeFormatter.of(“dd.MM.yyyy”);
add(LocalDate.parse(dateString,formatter));
date=obj.getAsJsonPrimitive(“endDate”);
dateString=date.getAsString();
LocalDate end=LocalDate.parse(日期字符串,格式化程序);
日期。添加(结束);
返回日期;
}
没问题 您在这里展示的代码应该是有效的。您在此处提供的信息不足,无法解决此问题

看这个

ld.toString():2018-05-20

调试 在调试此类问题时,请将问题简化为其核心。在本例中,这意味着剥离所有JSON业务,专注于让日期解析本身正常工作

这也提出了一个关于堆栈溢出的更好的问题

ISO 8601 将日期时间值交换为文本的最佳实践是始终使用标准格式


默认情况下,java.time类在解析/生成字符串时使用这些标准格式。请参见上面的YYYY-MM-DD格式示例。

您能否提供一个?格式正确,与提供的日期一致<代码>DateTimeFormatter Formatter=DateTimeFormatter.of模式(“dd.MM.yyyy”);System.out.println(LocalDate.parse(“13.05.2018”,格式化程序))>
“2018-05-13”
我也看不出你的代码有什么问题。我在猜测你的字符串是否包含一些我们不知道的有趣字符。在尝试解析之前,您可能需要记录
Arrays.tostring(dateString.tocharray())
以进行检查。
String input = "20.05.2018" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd.MM.yyyy" );
LocalDate ld = LocalDate.parse( input , f ) ;