web-dev-qa-db-ja.com

Java 8 – TimeZoneでLocalDateTimeからインスタントを作成

DBに文字列形式ddMMyyyyとhh:mmで保存された日付とTimeZoneがあります。その情報に基づいてインスタントを作成したいのですが、その方法がわかりません。

何かのようなもの

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

最初にそのタイムゾーンでZonedDateTimeを作成してから、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

また、曖昧さが少なくなるため、フルタイムゾーン名の使用に切り替えました(バジルのアドバイスによる)。

37
Jorn Vernee

古いTimeZoneクラスを忘れてください。 ZoneIdを使用します。これは適切にスレッドセーフであり、最終的な静的フィールドを使用してゾーンを格納することができるためです。

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