Java で LocalDateTime を別タイムゾーンの時刻に変換する

2021/12/04に公開

単純に plusHoursminusHours してもいいかもしれないが、タイムゾーンを明示しての変換の方が何かと良い場面は多そう。この場合、一度 OffsetDateTime に変換して withZoneSameInstant メソッドを使うのがよさそうだ。

例)UTC の LocalDateTime を JST の LocalDateTime に変換する

var utcLocalDateTime = LocalDateTime.of(
        LocalDate.of(2021, 12, 4),
        LocalTime.of(12, 30, 0)
);

// 一度 OffsetDateTime に変換し、
var utcOffsetDateTime = utcLocalDateTime.atZone(ZoneOffset.UTC);

// withZoneSameInstant メソッドを使って同時間軸の別タイムゾーンに変換。
var jstOffsetDateTime = utcOffsetDateTime.withZoneSameInstant(ZoneId.of("Asia/Tokyo"));

// 改めて LocalDateTime に変換する。
var jstLocalDateTime = jstOffsetDateTime.toLocalDateTime();

Discussion