/** * @dataProvider provider_reducedWithChrono */ public function test_reducedWithChronoYearOfEra(ChronoLocalDate $date) { $chrono = $date->getChronology(); $df = (new DateTimeFormatterBuilder())->appendValueReduced2(ChronoField::YEAR_OF_ERA(), 2, 2, LocalDate::of(2000, 1, 1))->toFormatter()->withChronology($chrono); $expected = $date->get(ChronoField::YEAR_OF_ERA()); $input = $df->format($date); $pos = new ParsePosition(0); $parsed = $df->parseUnresolved($input, $pos); $actual = $parsed->get(ChronoField::YEAR_OF_ERA()); $this->assertEquals($actual, $expected, "Wrong date parsed, chrono: " . $chrono . ", input: " . $input); }
/** * @inheritdoc */ public function compareTo(ChronoLocalDate $other) { $cmp = Long::compare($this->toEpochDay(), $other->toEpochDay()); if ($cmp === 0) { $cmp = $this->getChronology()->compareTo($other->getChronology()); } return $cmp; }
public function plus($amountToAdd, TemporalUnit $unit) { if ($unit instanceof ChronoUnit) { $f = $unit; switch ($f) { case ChronoUnit::NANOS(): return $this->plusNanos($amountToAdd); case ChronoUnit::MICROS(): return $this->plusDays(Math::div($amountToAdd, self::MICROS_PER_DAY))->plusNanos($amountToAdd % self::MICROS_PER_DAY * 1000); case ChronoUnit::MILLIS(): return $this->plusDays(Math::div($amountToAdd, self::MILLIS_PER_DAY))->plusNanos($amountToAdd % self::MILLIS_PER_DAY * 1000000); case ChronoUnit::SECONDS(): return $this->plusSeconds($amountToAdd); case ChronoUnit::MINUTES(): return $this->plusMinutes($amountToAdd); case ChronoUnit::HOURS(): return $this->plusHours($amountToAdd); case ChronoUnit::HALF_DAYS(): return $this->plusDays(Math::div($amountToAdd, 256))->plusHours($amountToAdd % 256 * 12); // no overflow (256 is multiple of 2) } return $this->_with($this->date->plus($amountToAdd, $unit), $this->time); } return ChronoLocalDateTimeImpl::ensureValid($this->date->getChronology(), $unit->addTo($this, $amountToAdd)); }