現在の時間に数年を追加しようとしています。私のコードは次のようになります。java.time.Instant.plus(long amountToAdd、TemporalUnit unit)サポートされていないユニット
// ten yeas ago
int backYears = 10;
Instant instant = ChronoUnit.YEARS.addTo(Instant.now(), -backYears);
しかし、私は例外が発生しました:あなたはMONTHS
とYEARS
を見ることができるように
@Override
public Instant plus(long amountToAdd, TemporalUnit unit) {
if (unit instanceof ChronoUnit) {
switch ((ChronoUnit) unit) {
case NANOS: return plusNanos(amountToAdd);
case MICROS: return plus(amountToAdd/1000_000, (amountToAdd % 1000_000) * 1000);
case MILLIS: return plusMillis(amountToAdd);
case SECONDS: return plusSeconds(amountToAdd);
case MINUTES: return plusSeconds(Math.multiplyExact(amountToAdd, SECONDS_PER_MINUTE));
case HOURS: return plusSeconds(Math.multiplyExact(amountToAdd, SECONDS_PER_HOUR));
case HALF_DAYS: return plusSeconds(Math.multiplyExact(amountToAdd, SECONDS_PER_DAY/2));
case DAYS: return plusSeconds(Math.multiplyExact(amountToAdd, SECONDS_PER_DAY));
}
throw new UnsupportedTemporalTypeException("Unsupported unit: " + unit);
}
return unit.addTo(this, amountToAdd);
}
:私は以下を参照してください方法Instant.plus
を開け
java.time.temporal.UnsupportedTemporalTypeException: Unsupported unit: Years
at java.time.Instant.plus(Instant.java:862)
サポートされていません。しかし、なぜ?古いjava.util.Calendar
で は、私は簡単にそれを行うことができます。
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.YEAR, amount);
return c.getTime();
を私が推測するものを一つだけの理由は、私たちが何日、月と年のため、うるう日の2月29日 でもするのか分からないということです正直言って、leap secondもあります。 これはバグだと思っており、すべてChronoUnit
がサポートされているはずです。 唯一の問題は、閏年と閏年を考慮に入れなければならないことです。 私の必要に応じて、その月は30日と365日と仮定するだけで大丈夫です。 Calendar.roll()
のようなものを作る必要はありませんが、これも私を満足させることができます。
私はクラスをデザインしていないので、私は確かに言えません。私はナノ秒から数日までのユニットを瞬間的に秒とナノに変換することができると考えています(閏秒を無視するのでほとんどのコンピュータで無視されるため)。 'ZonedDateTime'、' OffsetDateTime'、 'LocalDateTime'のようなクラスは、月と年の扱い方を知っています。 –