public String getDurationStr() {
        if (!isBounded()) {
            return null;
        }
        final Duration duration = Duration.between(
                Instant.ofEpochMilli(getFrom()), Instant.ofEpochMilli(getTo()));

        long durationMs = getTo() - getFrom();
        int totalHours = (int) (durationMs / MS_IN_HOUR);
        durationMs = durationMs - (totalHours * MS_IN_HOUR);

        int hours;
        int days;
        if (totalHours > 24) {
            hours = totalHours % 24;
            days = totalHours / 24;
        } else {
            hours = totalHours;
            days = 0;
        }

        int minutes = (int) (durationMs / MS_IN_MINUTE);
        durationMs = durationMs - (minutes * MS_IN_MINUTE);
        int seconds = (int) (durationMs / MS_IN_SECOND);
        durationMs = durationMs - (seconds * MS_IN_SECOND);

        final StringBuilder sb = new StringBuilder();
//        sb.append(zeroPad(2, Integer.toString(totalHours)));
//        sb.append(":");
//        sb.append(zeroPad(2, Integer.toString(minutes)));
//        sb.append(":");
//        sb.append(zeroPad(2, Integer.toString(seconds)));
//        sb.append(".");
//        sb.append(zeroPad(N3, Long.toString(duration)));

        sb.append(duration);

        if (days > 0) {
            sb.append(" (");
            sb.append(days);
            sb.append(" days ");
            sb.append(hours);
            sb.append(" hrs)");
        }

        return sb.toString();
    }
Gets the duration as a user readable string.
stroom-util/src/main/java/stroom/util/Period.java