/** * Creates a <code>Years</code> representing the number of whole years between the two specified * partial datetimes. * * <p>The two partials must contain the same fields, for example you can specify two <code> * LocalDate</code> objects. * * @param start the start partial date, must not be null * @param end the end partial date, must not be null * @return the period in years * @throws IllegalArgumentException if the partials are null or invalid */ public static Years yearsBetween(ReadablePartial start, ReadablePartial end) { if (start instanceof LocalDate && end instanceof LocalDate) { Chronology chrono = DateTimeUtils.getChronology(start.getChronology()); int years = chrono .years() .getDifference( ((LocalDate) end).getLocalMillis(), ((LocalDate) start).getLocalMillis()); return Years.years(years); } int amount = BaseSingleFieldPeriod.between(start, end, ZERO); return Years.years(amount); }
/** * Creates a new <code>Years</code> by parsing a string in the ISO8601 format 'PnY'. * * <p>The parse will accept the full ISO syntax of PnYnMnWnDTnHnMnS however only the years * component may be non-zero. If any other component is non-zero, an exception will be thrown. * * @param periodStr the period string, null returns zero * @return the period in years * @throws IllegalArgumentException if the string format is invalid */ public static Years parseYears(String periodStr) { if (periodStr == null) { return Years.ZERO; } Period p = PARSER.parsePeriod(periodStr); return Years.years(p.getYears()); }
/** * Creates a <code>Years</code> representing the number of whole years in the specified interval. * This method corectly handles any daylight savings time changes that may occur during the * interval. * * @param interval the interval to extract years from, null returns zero * @return the period in years * @throws IllegalArgumentException if the partials are null or invalid */ public static Years yearsIn(ReadableInterval interval) { if (interval == null) { return Years.ZERO; } int amount = BaseSingleFieldPeriod.between( interval.getStart(), interval.getEnd(), DurationFieldType.years()); return Years.years(amount); }
/** * Creates a <code>Years</code> representing the number of whole years between the two specified * datetimes. This method corectly handles any daylight savings time changes that may occur during * the interval. * * @param start the start instant, must not be null * @param end the end instant, must not be null * @return the period in years * @throws IllegalArgumentException if the instants are null or invalid */ public static Years yearsBetween(ReadableInstant start, ReadableInstant end) { int amount = BaseSingleFieldPeriod.between(start, end, DurationFieldType.years()); return Years.years(amount); }
/** * Returns a new instance with the years value negated. * * @return the new period with a negated value * @throws ArithmeticException if the result overflows an int */ public Years negated() { return Years.years(FieldUtils.safeNegate(getValue())); }
/** * Returns a new instance with the years divided by the specified divisor. The calculation uses * integer division, thus 3 divided by 2 is 1. * * <p>This instance is immutable and unaffected by this method call. * * @param divisor the amount to divide by, may be negative * @return the new period divided by the specified divisor * @throws ArithmeticException if the divisor is zero */ public Years dividedBy(int divisor) { if (divisor == 1) { return this; } return Years.years(getValue() / divisor); }
/** * Returns a new instance with the years multiplied by the specified scalar. * * <p>This instance is immutable and unaffected by this method call. * * @param scalar the amount to multiply by, may be negative * @return the new period multiplied by the specified scalar * @throws ArithmeticException if the result overflows an int */ public Years multipliedBy(int scalar) { return Years.years(FieldUtils.safeMultiply(getValue(), scalar)); }
/** * Returns a new instance with the specified number of years added. * * <p>This instance is immutable and unaffected by this method call. * * @param years the amount of years to add, may be negative * @return the new period plus the specified number of years * @throws ArithmeticException if the result overflows an int */ public Years plus(int years) { if (years == 0) { return this; } return Years.years(FieldUtils.safeAdd(getValue(), years)); }
/** * Resolves singletons. * * @return the singleton instance */ private Object readResolve() { return Years.years(getValue()); }