Je travaille avec la nouvelle API DateTime de Java 8.
Comment convertir une LocalDate en Instant? Je reçois une exception avec
LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);
et je ne comprends pas pourquoi.
Je travaille avec la nouvelle API DateTime de Java 8.
Comment convertir une LocalDate en Instant? Je reçois une exception avec
LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);
et je ne comprends pas pourquoi.
Réponses:
La Instant
classe représente un point instantané sur la ligne du temps. La conversion vers et depuis a LocalDate
nécessite un fuseau horaire. Contrairement à d'autres bibliothèques de date et d'heure, le JSR-310 ne sélectionnera pas automatiquement le fuseau horaire pour vous, vous devez donc le fournir.
LocalDate date = LocalDate.now();
Instant instant = date.atStartOfDay(ZoneId.systemDefault()).toInstant();
Cet exemple utilise le fuseau horaire par défaut de la JVM - ZoneId.systemDefault()
- pour effectuer la conversion. Voir ici pour une réponse plus longue à une question connexe.
Mise à jour: La réponse acceptée utilise LocalDateTime::toInstant(ZoneOffset)
qui accepte uniquement ZoneOffset
. Cette réponse utilise LocalDate::atStartOfDay(ZoneId)
qui accepte tout ZoneId
. En tant que telle, cette réponse est généralement plus utile (et devrait probablement être celle acceptée).
PS. J'étais l'auteur principal de l'API
Pour le convertir en un instant, vous devez avoir une instance LocalDateTime, par exemple:
LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC)
LocalDate
n'inclut pas de temps.