public String getAsDuration() {
        if (lowerBound.longValue() == higherBound.longValue()) {
            return "0s";
        }
        long duration = getLength().longValue();
        long remaining = duration;
        long seconds = remaining % 60;
        remaining /= 60;
        long minutes = remaining % 60;
        remaining /= 60;
        long hours = remaining % 60;
        StringBuilder sb = new StringBuilder();
        boolean leadingSpaceNeeded;
        if (hours != 0) {
            sb.append(Math.abs(hours)).append("h");
            leadingSpaceNeeded = true;
        } else {
            leadingSpaceNeeded = false;
        }
        if (minutes != 0) {
            if (leadingSpaceNeeded) {
                sb.append(' ');
            }
            sb.append(Math.abs(minutes)).append("m");
            leadingSpaceNeeded = true;
        }
        if ((seconds != 0) || ((minutes == 0L) && (hours == 0L))) {
            if (leadingSpaceNeeded) {
                sb.append(' ');
            }
            sb.append(Math.abs(seconds)).append("s");
        }
        return sb.toString();
    }