code: public static <U extends IsoUnit> Duration<U> of(
          long amount,
          U unit
      ) {
  
          if (amount == 0) {
              return ofZero();
          }
  
          U u = unit;
          long value = amount;
  
          if (amount < 0) {
              value = MathUtils.safeNegate(amount);
          }
  
          if (unit instanceof ClockUnit) {
  	        switch (unit.getSymbol()) {
  	            case '3':
  	                u = cast(ClockUnit.NANOS);
  	                value = MathUtils.safeMultiply(value, MIO);
  	                break;
  	            case '6':
  	                u = cast(ClockUnit.NANOS);
  	                value = MathUtils.safeMultiply(value, 1000);
  	                break;
  	            default:
  	                // no-op
  	        }
          }
  
          List<Item<U>> items = new ArrayList<>(1);
          items.add(Item.of(value, u));
          return new Duration<>(items, (amount < 0));
  
      }
docs: /*[deutsch]
  <p>Erzeugt eine neue Zeitspanne, die auf nur einer Zeiteinheit
  beruht. </p>
  
  <p>Ist der angegebene Betrag negativ, so wird auch die Zeitspanne
  negativ sein. Ist er {@code 0}, wird eine leere Zeitspanne
  zur&uuml;ckgegeben. Millisekunden oder Mikrosekunden werden
  automatisch zu Nanosekunden normalisiert. </p>
  
  @param   <U> generic unit type
  @param   amount      amount as count of units
  @param   unit        single time unit
  @return  new duration