java.time.format.DateTimeParseException:Text' 13.05.2018'无法在索引2处解析

时间:2018-05-20 16:22:10

标签: java json websocket gson datetime-format

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

我正在使用Google's GSON来解析JSON

这是我用Java代码将日期作为String并将其解析为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;
    }

1 个答案:

答案 0 :(得分:0)

没问题

您在此处提供的代码类型应该正常运行。您没有在此处提供足够的信息来解决问题。

请参阅此code run live at IdeOne.com

String input = "20.05.2018" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd.MM.yyyy" );
LocalDate ld = LocalDate.parse( input , f ) ;
  

ld.toString():2018-05-20

调试

调试此类问题时,请将问题减少到其核心。在这种情况下,这意味着剥离所有JSON业务,专注于使日期解析本身正常工作。

这也是一个更好的Stack Overflow问题。

ISO 8601

将日期时间值作为文本进行交换的最佳做法是始终使用标准ISO 8601格式。

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