public static Optional<String> describe(Duration duration) { if (duration.isZero()) { return Optional.empty(); } Optional<String> value = inUnits(duration, ChronoUnit.DAYS, "days"); if (!value.isPresent()) { value = inUnits(duration, ChronoUnit.HOURS, "hours"); } if (!value.isPresent()) { value = inUnits(duration, ChronoUnit.MINUTES, "minutes"); } if (!value.isPresent()) { value = inUnits(duration, ChronoUnit.SECONDS, "s"); } if (!value.isPresent()) { value = inUnits(duration, ChronoUnit.MILLIS, "ms"); } if (!value.isPresent()) { value = inUnits(duration, ChronoUnit.MICROS, "\u00B5s"); } if (!value.isPresent()) { value = Optional.of(convert(duration, ChronoUnit.NANOS, "ns")); } return value; }