1週間前に、LocalDateTimeとして2015-10-10T10:00:00を生成したとします。さらに、現在のタイムゾーンIDを生成したとしましょう
TimeZone timeZone = TimeZone.getDefault();
String zoneId = timeZone.getId(); // "America/Chicago"
そして、私のzoneIdは「America/Chicago」です。
LocalDateTimeをタイムゾーンID "America/New_York"のLocalDateTimeに変換する簡単な方法はありますか(つまり、更新されたLocalDateTimeは2015-10-10T11:00:00になります)?
さらに重要なのは、現在のタイムゾーンに関係なく、LocalDateTimeを東部時間(つまり、zoneId "America/New_York"のタイムゾーン)に変換する方法はありますか。具体的には、過去に生成されたLocalDateTimeオブジェクトを使用してこれを行う方法を探しています。必ずしもこの瞬間の現在の時間ではありません。
LocalDateTime
を別のタイムゾーンに変換するには、まず atZone()
を使用して元のタイムゾーンを適用します 、 ZonedDateTime
を返し、 withZoneSameInstant()
、最後に結果をLocalDateTime
に変換します。
LocalDateTime oldDateTime = LocalDateTime.parse("2015-10-10T10:00:00");
ZoneId oldZone = ZoneId.of("America/Chicago");
ZoneId newZone = ZoneId.of("America/New_York");
LocalDateTime newDateTime = oldDateTime.atZone(oldZone)
.withZoneSameInstant(newZone)
.toLocalDateTime();
System.out.println(newDateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
2015-10-10T11:00:00
最後の手順をスキップすると、ゾーンが維持されます。
ZonedDateTime newDateTime = oldDateTime.atZone(oldZone)
.withZoneSameInstant(newZone);
System.out.println(newDateTime.format(DateTimeFormatter.ISO_DATE_TIME));
2015-10-10T11:00:00-04:00[America/New_York]