La Instantclasse représente un point instantané sur la ligne du temps. La conversion vers et depuis a LocalDatené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).
Je pense que c'est la réponse la plus utile que la réponse acceptée puisque ZoneId (fuseau horaire) est le paramètre et non ZoneOffset (heures décalées de UTC, qui peuvent changer pour un fuseau horaire en été / hiver).
wuerg
1
Dans un test unitaire que j'écris, j'ai un LocalDate, qui est converti en com.google.protobuf.Timestamp puis mappé à un LocalDate via un instant, dans les deux sens. Lorsque j'utilise l'approche suggérée par la réponse acceptée, j'obtiens la LocalDate attendue en retour, mais en utilisant cette approche, je reviens "hier" au lieu de "aujourd'hui". Mon fuseau horaire est GMT + 1
Nadrendion
127
Pour le convertir en un instant, vous devez avoir une instance LocalDateTime, par exemple:
LocalDate
n'inclut pas de temps.Réponses:
La
Instant
classe représente un point instantané sur la ligne du temps. La conversion vers et depuis aLocalDate
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.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 uniquementZoneOffset
. Cette réponse utiliseLocalDate::atStartOfDay(ZoneId)
qui accepte toutZoneId
. 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
la source
Pour le convertir en un instant, vous devez avoir une instance LocalDateTime, par exemple:
la source