DBに文字列形式ddMMyyyyとhh:mmで保存された日付とTimeZoneがあります。その情報に基づいてインスタントを作成したいのですが、その方法がわかりません。
何かのようなもの
LocalDateTime dateTime = LocalDateTime.of(2017, Month.JUNE, 1, 13, 39);
Instant instant = dateTime.toInstant(TimeZone.getTimeZone("ECT"));
最初にそのタイムゾーンで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
また、曖昧さが少なくなるため、フルタイムゾーン名の使用に切り替えました(バジルのアドバイスによる)。
古いTimeZoneクラスを忘れてください。 ZoneId
を使用します。これは適切にスレッドセーフであり、最終的な静的フィールドを使用してゾーンを格納することができるためです。
LocalDateTime dateTime = LocalDateTime.of(2017, Month.JUNE, 1, 13, 39);
ZonedDateTime.of(dateTime, ZoneId.of("ECT")).toInstant();