Java 8に時間計算を使用するコードの一部を記述します。異なる方法で実装できることを理解しています。以下の簡単なコードを見てみましょう。もちろん同じ結果ですが、 Java 8?
LocalTime time = LocalTime.now();
// 1st way
LocalTime plusOp = time.plus(Duration.ofMinutes(10L));
// 2nd way
LocalTime plusOp2 = time.plus(10L, ChronoUnit.MINUTES);
System.out.println(plusOp);
System.out.println(plusOp2);
// 3. way simply
time.plusMinutes(10L);
前もって感謝します。
Duration
は、「時間」、「分」、「秒」、「日」などの固定長の期間のみを処理できます(1日あたり正確に24時間を想定しています)。月は長さが異なるため、Duration
で「月」を使用することはできません。
Period
-その他の一般的なTemporalAmount
実装-年、月、日を個別に表します。
個人的に私はお勧めします:
plusXxx
メソッドを使用してください。 time.plusMinutes(10)
。それはそれが得るのと同じくらい読みやすいです。Period
を使用しますDuration
を使用しますPeriod
とDuration
が異なる可能性がある場所の例を次に示します。
import Java.time.*;
public class Test {
public static void main(String[] args) {
ZoneId zone = ZoneId.of("Europe/London");
// At 2015-03-29T01:00:00Z, Europe/London goes from UTC+0 to UTC+1
LocalDate transitionDate = LocalDate.of(2015, 3, 29);
ZonedDateTime start = ZonedDateTime.of(transitionDate, LocalTime.MIDNIGHT, zone);
ZonedDateTime endWithDuration = start.plus(Duration.ofDays(1));
ZonedDateTime endWithPeriod = start.plus(Period.ofDays(1));
System.out.println(endWithDuration); // 2015-03-30T01:00+01:00[Europe/London]
System.out.println(endWithPeriod); // 2015-03-30T00:00+01:00[Europe/London]
}
}
本当に必要になるまで、効率について心配する必要はありません。その時点で、さまざまなオプションをテストできるようにベンチマークを用意する必要があります。
ソースを見ると、plus(long amountToAdd, TemporalUnit unit)
メソッドはplusXXX
メソッドを使用して結果を生成します。したがって、ここでは効率についての議論はありません。
代わりに、シナリオに最も適した方を使用します。ユーザー入力を使用して時間や分などを追加するかどうかを決定する場合は、plus()
メソッドの方が適していることをお勧めします。そうしないと、plusXXX
を使用すると、コードが読みやすくなる可能性があります。