web-dev-qa-db-fra.com

Java 8 - Création instantanée à partir de LocalDateTime avec TimeZone

J'ai une date stockée dans la base de données au format de chaîne ddMMyyyy et hh: mm et dans le fuseau horaire. Je veux créer un Instant basé sur cette information, mais je ne sais pas comment le faire.

quelque chose comme

LocalDateTime dateTime = LocalDateTime.of(2017, Month.JUNE, 1, 13, 39);
Instant instant = dateTime.toInstant(TimeZone.getTimeZone("ECT"));
19
La Carbonell

Vous pouvez d’abord créer un ZonedDateTime avec ce fuseau horaire, puis appeler toInstant:

LocalDateTime dateTime = LocalDateTime.of(2017, Month.JUNE, 15, 13, 39);
Instant instant = dateTime.atZone(ZoneId.of("Europe/Paris")).toInstant();
System.out.println(instant); // 2017-06-15T11:39:00Z

J'ai également opté pour le nom de fuseau horaire complet (selon l'avis de Basil), car il est moins ambigu.

37
Jorn Vernee

Oubliez l'ancienne classe TimeZone. Utilisez ZoneId, car il est correctement thread-safe et vous pouvez simplement utiliser un dernier champ statique pour stocker la zone.

LocalDateTime dateTime = LocalDateTime.of(2017, Month.JUNE, 1, 13, 39);
ZonedDateTime.of(dateTime, ZoneId.of("ECT")).toInstant();
4
coladict