2

Java での 2 つの日付または 2 つの時間の差の計算を扱う SO の質問はたくさんあります。多くの回答がコア Java Date クラスの問題を指摘し、Jodatime の使用を提案していますが、私の知る限り、jsr310 を使用してこれを行う方法を提案するものはありません。

では、jsr310 で 2 つの日付または 2 つの時刻の差を計算する方法はありますか?


参考までに、次の質問でこの問題を処理します。

コア Java では:

ジョダタイムでは:

4

2 に答える 2

0

これを行う方法は、使用されている日付または日時クラスによって異なります。

Instantリアルタイムで操作している場合(つまり、タイムゾーンなどを使用して日時をタイムライン上で正確に特定できる場合)、Durationクラス(javadoc)を使用できます-例

Duration diff = Duration.between(InstantProvider startInc, InstantProvider endInc);

InstantProvider が可能な場所

あるいは、仮の時間 (つまり、タイムゾーンなどなし) で操作している場合は、Periodクラス ( javadocLocalDate ) を使用して、2 つのインスタンスの差を取得できます。

// diff in days, months and years:
Period diff = Period.between(LocalDate start, LocalDate end);

// diff in days:
Period diff = Period.daysBetween(LocalDate start, LocalDate end);

ただし、2 つの LocalDateTimes または LocalTimes の差を取得するための便利な方法は知りません。しかし...これは、次のように Period を使用して実行できます。

// diff between LocalDateTimes:
public static Period between(LocalDateTime start, LocalDateTime end){
  return Period.of(
    end.getYear()-start.getYear(), 
    end.getMonthOfYear().getValue()-start.getMonthOfYear().getValue(), 
    end.getDayOfMonth()-start.getDayOfMonth(),
    end.getHourOfDay()-start.getHourOfDay(),
    end.getMinuteOfHour()-start.getMinuteOfHour(),
    end.getSecondOfMinute()-start.getSecondOfMinute(),
    end.getNanoOfSecond()-start.getNanoOfSecond()
  );
}

// diff between LocalTimes:
public static Period between(LocalTime start, LocalTime end){
  return Period.of(0, 0, 0,
    end.getHourOfDay()-start.getHourOfDay(),
    end.getMinuteOfHour()-start.getMinuteOfHour(),
    end.getSecondOfMinute()-start.getSecondOfMinute(),
    end.getNanoOfSecond()-start.getNanoOfSecond()
  );
}
于 2012-06-25T10:31:51.910 に答える