code: public String printRelativeOrDateTime(
          UnixTime moment,
          Timezone tz,
          TimeUnit precision,
          long maxdelta,
          TemporalFormatter<Moment> formatter
      ) {
  
          UnixTime ref = this.getReferenceClock().currentTime();
          Moment t1 = Moment.from(ref);
          Moment t2 = Moment.from(moment);
          long delta = t1.until(t2, TimeUnit.SECONDS);
  
          if (Math.abs(delta) > maxdelta) {
              return formatter.format(t2);
          } else if (
              (precision.compareTo(TimeUnit.SECONDS) <= 0)
              && (Math.abs(delta) < 60L)
          ) {
              return this.printRelativeSeconds(t1, t2, delta);
          }
  
          return this.printRelativeTime(t1, t2, tz, precision, null, null);
  
      }
docs: /*[deutsch]
  <p>Formatiert den angegebenen Zeitpunkt relativ zur aktuellen Zeit
  der Referenzuhr {@link #getReferenceClock()} als Dauer in der angegebenen
  maximalen Genauigkeit oder als absolute Datumszeit. </p>
  
  <p>Wenn die berechnete Dauer in Sekunden gr&ouml;&szlig;er als {@code maxdelta} ist, wird
  die absolute Datumszeit formatiert, sonst wird ein relativer Ausdruck verwendet. </p>
  
  @param   moment      relative time point
  @param   tz          time zone for translating to a local duration
  @param   precision   maximum precision of relative time (not more than seconds)
  @param   maxdelta    maximum deviation of given moment from clock in posix seconds for relative printing
  @param   formatter   used for printing absolute time if the deviation is bigger than maxdelta
  @return  formatted output of relative time, either in past or in future
  @since   3.6/4.4