public LocalDateTime minus(PeriodProvider periodProvider) {
Period period = Period.from(periodProvider); // TODO: overflows long->int PeriodFields
// TODO: correct algorithm
LocalDate date = this.date.minusYears(period.getYears())
.minusMonths(period.getMonths()).minusDays(period.getDays());
Overflow overflow = this.time.minusWithOverflow(
period.getHours(), period.getMinutes(), period.getSeconds(), period.getNanos());
LocalDateTime result = overflow.toLocalDateTime(date);
return (result.equals(this) ? this : result);
}