public String toString() {
        StringBuilder sb = new StringBuilder();
        long ms = this.millis;
        int ns = this.nanos;
        if (ms < 0 || (ms == 0 && ns < 0)) {
            sb.append("-");
            ms *= -1;
            ns *= -1;
        }
        if (ms > Duration.DAY) {
            ms = extract(ms, Duration.DAY, "d", sb);
        }
        if (ms > Duration.HOUR) {
            ms = extract(ms, Duration.HOUR, "h", sb);
        }
        if (ms > Duration.MINUTE) {
            ms = extract(ms, Duration.MINUTE, "m", sb);
        }
        if (ms > Duration.SECOND) {
            // Findbugs complains of "dead store" if assigned to ms here
            extract(ms, Duration.SECOND, "s", sb);
        }
        if (ns > 0) {
            sb.append(ns);
            sb.append("n");
        }
        return sb.toString();
    }