web-dev-qa-db-fra.com

Comment convertir un LocalDate en Instant?

Je travaille avec la nouvelle API DateTime de Java 8.

Comment convertir un 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.

83
user1643352

Pour le convertir en un instant, vous devez avoir une instance LocalDateTime, par exemple:

LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC)
106
mdo

La classe Instant représente un point instantané sur la ligne de temps. La conversion vers et depuis un LocalDate nécessite un fuseau horaire. Contrairement à d'autres bibliothèques de date et d'heure, JSR-310 ne sélectionne pas automatiquement le fuseau horaire. 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 machine virtuelle Java - ZoneId.systemDefault() - pour effectuer la conversion. Voir ici pour un réponse plus longue à une question connexe.


Mise à jour: La réponse acceptée utilise LocalDateTime::toInstant(ZoneOffset) qui n'accepte que ZoneOffset. Cette réponse utilise LocalDate::atStartOfDay(ZoneId) qui accepte n'importe quel ZoneId. En tant que telle, cette réponse est généralement plus utile (et devrait probablement être la réponse acceptée).

PS J'étais l'auteur principal de l'API

65
JodaStephen