import java.time.Duration;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Test {
public static void main(String[] args) {
ZoneId tz = ZoneId.of("Asia/Tokyo");
ZoneId lz = ZoneId.of("America/Los_Angeles");
ZonedDateTime t = ZonedDateTime.of(
2024, 8, 14,12, 0, 0, 0, tz);
Duration d = Duration.ofHours(10).plusMinutes(20);
ZonedDateTime at = t.plus(d).withZoneSameInstant(lz);
System.out.println(t);
System.out.println(at);
}
}
本コードの目的として適切な選択肢は次のうちどれでしょうか。
1つ選んでください。
- 東京とロサンゼルスの時差を求めたい
- ロサンゼルスから東京に行った場合の東京の現地時間を知りたい
- 東京からロサンゼルスに行った場合のロサンゼルスの現地時間を知りたい
- 東京とロサンゼルスの現地時間を表示したい
- 東京およびロサンゼルスとの時差が10時間+-20分の地域を調べたい
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
3
「東京からロサンゼルスに行った場合のロサンゼルスの現地時間を知りたい」という目的が適切です。
ZoneId tz = ZoneId.of("Asia/Tokyo");
ZonedDateTime t = ZonedDateTime.of(2024, 8, 14,12, 0, 0, 0, tz);
東京時間(Asia/Tokyo)で2024年8月14日12:00に出発する時間を設定しています。
Duration d = Duration.ofHours(10).plusMinutes(20);
その後、移動時間として10時間20分を追加しています。
ZonedDateTime at = t.plus(d).withZoneSameInstant(lz);
withZoneSameInstant(lz)
を使って、ロサンゼルス時間(America/Los_Angeles)に変換しています。
これにより、東京からロサンゼルスに移動した場合のロサンゼルスでの現地時間が求められます。
補足
t
、d
などの変数名を修正した場合の例
public class FlightArrivalTimeTest {
public static void main(String[] args) {
ZoneId tokyoZone = ZoneId.of("Asia/Tokyo");
ZoneId laZone = ZoneId.of("America/Los_Angeles");
ZonedDateTime departureTime =
ZonedDateTime.of(2024, 8, 14,12, 0, 0, 0, tokyoZone);
Duration flightDuration = Duration.ofHours(10).plusMinutes(20);
ZonedDateTime arrivalTimeInLA = departureTime.plus(flightDuration)
.withZoneSameInstant(laZone);
System.out.println(departureTime);
System.out.println(arrivalTimeInLA);
}
}
結果
2024-08-14T12:00+09:00[Asia/Tokyo]
2024-08-14T06:20-07:00[America/Los_Angeles]
Document
ZoneId
ZoneId.of
ZonedDateTime
ZonedDateTime.of
Duration
withZoneSameInstant