public static String describeDuration(double duration, TimeUnit units) { TimeUnit targetUnits = displayUnitFor(Math.round(duration), units); double scaledDuration = convert(duration, units, targetUnits); return toThreeSigFig(scaledDuration, 2000) + " " + SHORT_TIMEUNIT_NAMES.get(targetUnits); }
private static Optional<String> inUnits(Duration duration, ChronoUnit unit, String name) { Duration cutoff = unit.getDuration().multipliedBy(2); if (duration.compareTo(cutoff) >= 0) { return Optional.of(convert(duration, unit, name)); } else { return Optional.empty(); } }
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; }
public static String describeDuration(StatisticalSummary duration, TimeUnit units) { double min = duration.getMin(); double max = duration.getMax(); if (min == max) { return describeDuration(max, units); } else { double mean = duration.getMean(); double sem = duration.getStandardDeviation() / Math.sqrt(duration.getN()); String meanDescription; if (sem == 0) { meanDescription = describeDuration(mean, units); } else { TimeUnit targetUnits = displayUnitFor(Math.round(mean), units); double scaledMean = convert(mean, units, targetUnits); double scaledSem = convert(sem, units, targetUnits); meanDescription = "(" + toThreeSigFig(scaledMean, 2000, scaledSem) + ") " + SHORT_TIMEUNIT_NAMES.get(targetUnits); } double sd = duration.getStandardDeviation(); return " min. " + describeDuration(min, units) + ", mean " + meanDescription + ", SD " + describeDuration(sd, units) + ", max. " + describeDuration(max, units); } }