LocalDate.ofEpochDay(ChronoField.EPOCH_DAY.range().getMinimum());
Этот код, приведенный выше, заканчивается следующей брошенной трассировкой стека:
java.time.DateTimeException: Invalid value for Year (valid values -999999999 - 999999999): -1000018564
at java.time.temporal.ValueRange.checkValidIntValue(ValueRange.java:330)
at java.time.temporal.ChronoField.checkValidIntValue(ChronoField.java:722)
at java.time.LocalDate.ofEpochDay(LocalDate.java:341)
Я не понял, почему эта инструкция не поддерживается.
На самом деле стратегия времени java - это запроссобственный Temporal его ValueRange
для TemporalField
до range (TemporalField)
метода.И в этом случае LocalDate
не изменяет диапазон значений по умолчанию для поля EpochDay.
@Override
public ValueRange range(TemporalField field) {
if (field instanceof ChronoField) {
ChronoField f = (ChronoField) field;
if (f.isDateBased()) {
switch (f) {
case DAY_OF_MONTH: return ValueRange.of(1, lengthOfMonth());
case DAY_OF_YEAR: return ValueRange.of(1, lengthOfYear());
case ALIGNED_WEEK_OF_MONTH: return ValueRange.of(1, getMonth() == Month.FEBRUARY && isLeapYear() == false ? 4 : 5);
case YEAR_OF_ERA:
return (getYear() <= 0 ? ValueRange.of(1, Year.MAX_VALUE + 1) : ValueRange.of(1, Year.MAX_VALUE));
}
return field.range();
}
throw new UnsupportedTemporalTypeException("Unsupported field: " + field);
}
return field.rangeRefinedBy(this);
}
Допустимые значения поля EpochDay должны быть преобразованы в LocalDate
, в противном случае, почему он находится в диапазоне?
То же самое происходит с полями Instant
и INSTANT_SECONDS
: Instant.ofEpochSecond(ChronoField.INSTANT_SECONDS.rangeRefinedBy(Instant.now()).getMinimum());
Может кто-нибудь помочь мне, пожалуйста?