Ne peut pas convertir la chaîne de ZonedDateTime: DateTimeParseException

J'essaie de convertir la chaîne de JSON à ZonedDateTime comme

static String getWatchTime(JSONObject aJson, JSONObject bJson) {
    long difference = 0 ;
    try {
        String aTime = aJson.getString("time_utc_8");
        String bTime = bJson.getString("time_utc_8");

        String pattern = "yyyy-MM-dd HH:mm:ss.SSSSSS";
        DateTimeFormatter Parser = DateTimeFormatter.ofPattern(pattern).ISO_DATE;

        System.out.println(aTime);

        ZonedDateTime a = ZonedDateTime.parse(aTime, Parser);
        ZonedDateTime b = ZonedDateTime.parse(bTime, Parser);

        ChronoUnit unit = null;
        difference = unit.between(a, b);

        System.out.println(difference);

    } catch (JSONException e) {
        //TODO Auto-generated catch block
        e.printStackTrace();
    }

    String t = difference +"";
    return t;

}

et de toujours obtenir l'erreur

Exception in thread "main" java.time.format.DateTimeParseException: Text '2016-06-28 22:29:44.700228' could not be parsed: Unable to obtain OffsetDateTime from TemporalAccessor: {},ISO resolved to 2016-06-28T22:29:44.700228 of type java.time.format.Parsed
at java.time.format.DateTimeFormatter.createError(Unknown Source)
at java.time.format.DateTimeFormatter.parse(Unknown Source)
at java.time.OffsetDateTime.parse(Unknown Source)
at Q2.getWatchTime(Q2.java:321)
at Q2.WatchTime(Q2.java:265)
at Q2.main(Q2.java:31)

Je veux obtenir la différence entre ces deux dates.
J'ai essayé SimpleDateFormat mais il recevra le résultat de l'erreur, pour les moulins.

  • Il n'a pas beaucoup de sens pour créer un Parser, puis appelez immédiatement ISO_DATE sur elle.
  • sans le Parser et ISO_DATE obtiendrez également DateTimePareseException
  • Ce que je veux dire c'est que DateTimeFormatter.ofPattern(pattern).ISO_DATE est équivalent à DateTimeFormatter.ISO_DATE.
  • merci pour votre message , j'ai googlé le problème et de trouver une des solution est d'ajouter ISO_DATE , je vais essayer une autre façons
  • Votre chaîne d'entrée ne contient pas les informations de fuseau horaire, de sorte que vous devez analyser à LocalDateTime, pas ZonedDateTime. Vous pouvez également spécifier un fuseau horaire par défaut sur l'analyseur, mais je vous suggère l'analyse de LocalDateTime. Vous pouvez toujours faire appel à atZone(ZoneId.systemDefault()) pour obtenir un ZonedDateTime, si c'est ce que vous avez vraiment besoin.
  • Votre chaîne, 2016-06-28 22:29:44.700228, ne sont conformes au modèle de format de chaîne de caractères que vous utilisez. Qu'advient-il si vous supprimez simplement .ISO_DATE?
  • Ensuite, l'appel de unit.between(a, b) juste après que vous avez initialisé unit à null est lié à provoquer un NullPointerException.

InformationsquelleAutor Zi-yan Tseng | 2017-06-11