CUBは子供の白熊

Java SE 8 実践プログラミングの練習問題を解く

第5章 日付と時刻の新たな API : 問題 11 : 飛行時間

問題

帰りの便は、フランクフルトを14時5分に出発し、ロサンジェルスに16時40分に到着する
飛行時間は何時間何分か?

個別に計算するのではなく、このような時刻計算を処理できるプログラムを書け

解答

問題10で定義したFlightクラスにメソッドを追加しよう

Flightクラス

/**
 * コンストラクタ
 * 
 * @param departurePlace  出発地
 * @param departureTime   出発時間(出発地での時間)
 * @param arrivalPlace    到着地
 * @param arrivalTime     到着時間(到着地での時間)
 */
public Flight(String departurePlace, LocalDateTime departureTime,
              String arrivalPlace  , LocalDateTime arrivalTime) {
    this.departurePlace = departurePlace;
    ZoneId zone = ZoneId.of(departurePlace, aliasMap);
    this.departureTime = ZonedDateTime.of(departureTime, zone);
    this.arrivalPlace = arrivalPlace;
    zone = ZoneId.of(arrivalPlace, aliasMap);
    this.arrivalTime = ZonedDateTime.of(arrivalTime, zone);
}

/**
 * 飛行時間の取得
 */
public Duration getFlightTime() {
    return Duration.between(departureTime, arrivalTime);
}

じゃあ、飛行時間は

Flight flight = new Flight(
    "フランクフルト", LocalDateTime.of(LocalDate.now(), LocalTime.of(14, 5)),
    "ロサンジェルス", LocalDateTime.of(LocalDate.now(), LocalTime.of(16, 40))
);
System.out.println(flight.getFlightTime());

11時間35分である