web-dev-qa-db-fra.com

Analyser l'horodatage de la chaîne pour les lancers instantanés Champ non pris en charge: InstantSeconds

J'essaie de convertir une chaîne en un instant. Peux-tu m'aider?

J'obtiens l'exception suivante:

Causée par: Java.time.temporal.UnsupportedTemporalTypeException: champ non pris en charge: InstantSeconds à Java.time.format.Parsed.getLong (Parsed.Java:203) à Java.time.Instant.from (Instant.Java:373)

Mon code ressemble essentiellement à ceci

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String timestamp = "2016-02-16 11:00:02";
TemporalAccessor temporalAccessor = formatter.parse(timestamp);
Instant result = Instant.from(temporalAccessor);

J'utilise Java 8 Update 72.

21
keiki

Voici comment obtenir un instantané avec le fuseau horaire par défaut. Votre chaîne ne peut pas être analysée directement sur Instant car le fuseau horaire est manquant. Vous pouvez donc toujours obtenir celui par défaut

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    String timestamp = "2016-02-16 11:00:02";
    TemporalAccessor temporalAccessor = formatter.parse(timestamp);
    LocalDateTime localDateTime = LocalDateTime.from(temporalAccessor);
    ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneId.systemDefault());
    Instant result = Instant.from(zonedDateTime);
22
Michael Gantman

Une méthode plus simple consiste à ajouter le fuseau horaire par défaut à l'objet formateur lors de sa déclaration

final DateTimeFormatter formatter = DateTimeFormatter
                                    .ofPattern("yyyy-MM-dd HH:mm:ss")
                                    .withZone(ZoneId.systemDefault());
Instant result = Instant.from(formatter.parse(timestamp));
14
jdex