@SuppressWarnings( "BooleanMethodIsAlwaysInverted" ) private boolean supports( TemporalField field ) { if ( field.isDateBased() ) { return supportsDate(); } if ( field.isTimeBased() ) { return supportsTime(); } throw new IllegalStateException( "Fields should be either date based or time based" ); }
default ValueRange range(TemporalField field) { if (field instanceof ChronoField) { return field.range(); } else { return field.rangeRefinedBy(this); } }
public boolean isSupported(final TemporalField field) { if (field instanceof ChronoField) { return (field == ChronoField.INSTANT_SECONDS) || (field == ChronoField.MILLI_OF_SECOND); } else { return field.isSupportedBy(this); } }
public long getLong(final TemporalField field) { if (field instanceof ChronoField) { if (field == ChronoField.INSTANT_SECONDS) { return millis / MILLIS_PER_SECOND; } else { throw new UnsupportedTemporalTypeException("Unsupported field: " + field); } } else { return field.getFrom(this); } }
@Override public boolean isSupported(TemporalField field) { if (field instanceof ChronoField) { return field.isDateBased() || field.isTimeBased(); } return field != null && field.isSupportedBy(this); }
public CalendarDate with(final TemporalField field, final long newValue) { if (field instanceof ChronoField) { if (field == ChronoField.INSTANT_SECONDS) { final long tmpMillisOfSecond = millis % MILLIS_PER_SECOND; return new CalendarDate((newValue * MILLIS_PER_SECOND) + tmpMillisOfSecond); } else if (field == ChronoField.MILLI_OF_SECOND) { final long tmpSeconds = millis / MILLIS_PER_SECOND; return new CalendarDate((tmpSeconds * MILLIS_PER_SECOND) + newValue); } else { throw new UnsupportedTemporalTypeException("Unsupported field: " + field); } } else { return field.adjustInto(this, newValue); } }
/** * Converts a value for this field to a fraction between 0 and 1. * <p> * The fractional value is between 0 (inclusive) and 1 (exclusive). * It can only be returned if the {@link TemporalField#range() value range} is fixed. * The fraction is obtained by calculation from the field range using 9 decimal * places and a rounding mode of {@link RoundingMode#FLOOR FLOOR}. * The calculation is inaccurate if the values do not run continuously from smallest to largest. * <p> * For example, the second-of-minute value of 15 would be returned as 0.25, * assuming the standard definition of 60 seconds in a minute. * * @param value the value to convert, must be valid for this rule * @return the value as a fraction within the range, from 0 to 1, not null * @throws DateTimeException if the value cannot be converted to a fraction */ private BigDecimal convertToFraction(long value) { ValueRange range = field.range(); range.checkValidValue(value, field); BigDecimal minBD = BigDecimal.valueOf(range.getMinimum()); BigDecimal rangeBD = BigDecimal.valueOf(range.getMaximum()).subtract(minBD).add(BigDecimal.ONE); BigDecimal valueBD = BigDecimal.valueOf(value).subtract(minBD); BigDecimal fraction = valueBD.divide(rangeBD, 9, RoundingMode.FLOOR); // stripTrailingZeros bug return fraction.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO : fraction.stripTrailingZeros(); }
@Override public ValueRange range(TemporalField field) { if (field == ERA) { return ValueRange.of(1, 1); } else if (field instanceof ChronoField) { throw new UnsupportedTemporalTypeException("Unsupported field: " + field); } return field.rangeRefinedBy(this); }
public boolean isSupported(TemporalField field) { if (field instanceof ChronoField) { return field.isTimeBased(); return field != null && field.isSupportedBy(this);
@Override public boolean isSupported(TemporalField field) { if (field instanceof ChronoField) { return field.isDateBased(); } return field != null && field.isSupportedBy(this); }
@Override public long getLong(TemporalField field) { if (field instanceof ChronoField) { return (field.isTimeBased() ? time.getLong(field) : date.getLong(field)); } return field.getFrom(this); }
@Override public ValueRange range(TemporalField field) { if (field instanceof ChronoField) { return (field.isTimeBased() ? time.range(field) : date.range(field)); } return field.rangeRefinedBy(this); }
@Override public ChronoLocalDateTimeImpl<D> with(TemporalField field, long newValue) { if (field instanceof ChronoField) { if (field.isTimeBased()) { return with(date, time.with(field, newValue)); } else { return with(date.with(field, newValue), time); } } return date.getChronology().ensureChronoLocalDateTime(field.adjustInto(this, newValue)); }
public YearQuarter with(TemporalField field, long newValue) { if (field == QUARTER_OF_YEAR) { return withQuarter(QUARTER_OF_YEAR.range().checkValidIntValue(newValue, QUARTER_OF_YEAR)); } else if (field instanceof ChronoField) { ChronoField f = (ChronoField) field; return field.adjustInto(this, newValue);
private static ExecutionTimeResult getNextPotentialValue( final ZonedDateTime date, final TimeNode node, final TemporalField field) throws NoSuchValueException { Set<Integer> values = new HashSet<>(node.values); TemporalUnit unit = field.getBaseUnit(); long maximum = field.range().getMaximum(); long minimum = field.range().getMinimum(); long range = maximum - minimum; ZonedDateTime newDate = date; for (long i = 0; i < 2 * range; i++) { newDate = newDate.plus(1, unit); if (values.contains(newDate.get(field))) { newDate = newDate .truncatedTo(unit); return new ExecutionTimeResult(newDate, false); } } throw new NoSuchValueException(); }
@Override public boolean isSupported(TemporalField field) { if (effectiveDate != null && field.isDateBased()) { return effectiveDate.isSupported(field); } return temporal.isSupported(field); } @Override
public int get(TemporalField field) { if (field instanceof ChronoField) { return (field.isTimeBased() ? time.get(field) : date.get(field));
default String getDisplayName(Locale locale) { return toString(); }
@Override public ValueRange range(TemporalField field) { if (field == ERA) { return field.range(); } else if (field instanceof ChronoField) { throw new UnsupportedTemporalTypeException("Unsupported field: " + field); } return field.rangeRefinedBy(this); }
@Override public boolean isSupported(TemporalField field) { if (field instanceof ChronoField) { return field == ERA; } return field != null && field.isSupportedBy(this); }