public <T extends Appendable> T getExactly(T a) {
        try {
            boolean prependBlank = false;
            long d = delta;
            if (d >= YEAR) {
                a.append(floor(d, YEAR));
                a.append(' ');
                a.append('y');
                prependBlank = true;
            }
            d %= YEAR;
            if (d >= DAY) {
                if (prependBlank) {
                    a.append(' ');
                }
                a.append(floor(d, DAY));
                a.append(' ');
                a.append('d');
                prependBlank = true;
            }
            d %= DAY;
            if (d >= HOUR) {
                if (prependBlank) {
                    a.append(' ');
                }
                a.append(floor(d, HOUR));
                a.append(' ');
                a.append('h');
                prependBlank = true;
            }
            d %= HOUR;
            if (d >= MINUTE) {
                if (prependBlank) {
                    a.append(' ');
                }
                a.append(floor(d, MINUTE));
                a.append(' ');
                a.append('m');
                prependBlank = true;
            }
            d %= MINUTE;
            if (d >= SECOND) {
                if (prependBlank) {
                    a.append(' ');
                }
                a.append(floor(d, SECOND));
                a.append(' ');
                a.append('s');
                prependBlank = true;
            }
            d %= SECOND;
            if (d > 0) {
                if (prependBlank) {
                    a.append(' ');
                }
                a.append(Integer.toString((int) d));
                a.append(' ');
                a.append('m');
                a.append('s');
            }
        } catch (IOException ex) {
            // What were they thinking...
        }
        return a;
    }
public < T extends Appendable > T getExactly ( T a ) { try { boolean prependBlank = false ; long d = delta ; if ( d >= YEAR ) { a . append ( floor ( d , YEAR ) ) ; a . append ( ' ' ) ; a . append ( 'y' ) ; prependBlank = true ; } d %= YEAR ; if ( d >= DAY ) { if ( prependBlank ) { a . append ( ' ' ) ; } a . append ( floor ( d , DAY ) ) ; a . append ( ' ' ) ; a . append ( 'd' ) ; prependBlank = true ; } d %= DAY ; if ( d >= HOUR ) { if ( prependBlank ) { a . append ( ' ' ) ; } a . append ( floor ( d , HOUR ) ) ; a . append ( ' ' ) ; a . append ( 'h' ) ; prependBlank = true ; } d %= HOUR ; if ( d >= MINUTE ) { if ( prependBlank ) { a . append ( ' ' ) ; } a . append ( floor ( d , MINUTE ) ) ; a . append ( ' ' ) ; a . append ( 'm' ) ; prependBlank = true ; } d %= MINUTE ; if ( d >= SECOND ) { if ( prependBlank ) { a . append ( ' ' ) ; } a . append ( floor ( d , SECOND ) ) ; a . append ( ' ' ) ; a . append ( 's' ) ; prependBlank = true ; } d %= SECOND ; if ( d > 0 ) { if ( prependBlank ) { a . append ( ' ' ) ; } a . append ( Integer . toString ( ( int ) d ) ) ; a . append ( ' ' ) ; a . append ( 'm' ) ; a . append ( 's' ) ; } } catch ( IOException ex ) { } return a ; }
Appends a human-formatted representation of the time delta to the given {@link Appendable} object.

@param <T> the return type
@param a   the Appendable object, may not be <code>null</code>
@return the given Appendable object, never <code>null</code>