public static String makeTimeStringNano()

in utils/common/src/main/java/org/apache/brooklyn/util/time/Time.java [297:385]


    public static String makeTimeStringNano(long tn, boolean round) {
        if (tn<0) return "-"+makeTimeStringNano(-tn, round);
        // units don't matter, but since ms is the usual finest granularity let's use it
        // (previously was just "0" but that was too ambiguous in contexts like "took 0")
        if (tn==0) return "0ms";
        
        long tnm = tn % 1000000;
        long t = tn/1000000;
        String result = "";
        
        long d = t/MILLIS_IN_DAY;  t %= MILLIS_IN_DAY;
        long h = t/MILLIS_IN_HOUR;  t %= MILLIS_IN_HOUR;
        long m = t/MILLIS_IN_MINUTE;  t %= MILLIS_IN_MINUTE;
        long s = t/MILLIS_IN_SECOND;  t %= MILLIS_IN_SECOND;
        long ms = t;
        
        int segments = 0;
        if (d>0) { result += d+"d "; segments++; }
        if (h>0) { result += h+"h "; segments++; }
        if (round && segments>=2) return Strings.removeAllFromEnd(result, " ");
        if (m>0) { result += m+"m "; segments++; }
        if (round && (segments>=2 || d>0)) return Strings.removeAllFromEnd(result, " ");
        if (s>0) {
            if (ms==0 && tnm==0) {
                result += s+"s"; segments++;
                return result;
            }
            if (round && segments>0) {
                result += s+"s"; segments++;
                return result;
            }
            if (round && s>10) {
                result += toDecimal(s, ms/1000.0, 1)+"s"; segments++;
                return result;
            }
            if (round) {
                result += toDecimal(s, ms/1000.0, 2)+"s"; segments++;
                return result;
            }
            result += s+"s ";
        }
        if (round && segments>0)
            return Strings.removeAllFromEnd(result, " ");
        if (ms>0) {
            if (tnm==0) {
                result += ms+"ms"; segments++;
                return result;
            }
            if (round && ms>=100) {
                result += toDecimal(ms, tnm/1000000.0, 1)+"ms"; segments++;
                return result;
            }
            if (round && ms>=10) {
                result += toDecimal(ms, tnm/1000000.0, 2)+"ms"; segments++;
                return result;
            }
            if (round) {
                result += toDecimal(ms, tnm/1000000.0, 3)+"ms"; segments++;
                return result;
            }
            result += ms+"ms ";
        }
        
        long us = tnm/1000;
        long ns = tnm % 1000;

        if (us>0) {
            if (ns==0) {
                result += us+"us"; segments++;
                return result;
            }
            if (round && us>=100) {
                result += toDecimal(us, ns/1000.0, 1)+"us"; segments++;
                return result;
            }
            if (round && us>=10) {
                result += toDecimal(us, ns/1000.0, 2)+"us"; segments++;
                return result;
            }
            if (round) {
                result += toDecimal(us, ns/1000.0, 3)+"us"; segments++;
                return result;
            }
            result += us+"us ";
        }

        if (ns>0) result += ns+"ns";
        return Strings.removeAllFromEnd(result, " ");
    }