public static string NanosToString(long nanos) { Debug.Assert(nanos >= 0); long nanoSeconds = nanos; StringBuilder timeString = new StringBuilder(); long days = DAYS.convert(nanoSeconds, NANOSECONDS); if (days > 0) { nanoSeconds -= DAYS.toNanos(days); timeString.Append(days).Append('d'); } long hours = HOURS.convert(nanoSeconds, NANOSECONDS); if (hours > 0) { nanoSeconds -= HOURS.toNanos(hours); timeString.Append(hours).Append('h'); } long minutes = MINUTES.convert(nanoSeconds, NANOSECONDS); if (minutes > 0) { nanoSeconds -= MINUTES.toNanos(minutes); timeString.Append(minutes).Append('m'); } long seconds = SECONDS.convert(nanoSeconds, NANOSECONDS); if (seconds > 0) { nanoSeconds -= SECONDS.toNanos(seconds); timeString.Append(seconds).Append('s'); } long milliseconds = MILLISECONDS.convert(nanoSeconds, NANOSECONDS); if (milliseconds > 0) { nanoSeconds -= MILLISECONDS.toNanos(milliseconds); timeString.Append(milliseconds).Append("ms"); } long microseconds = MICROSECONDS.convert(nanoSeconds, NANOSECONDS); if (microseconds > 0) { nanoSeconds -= MICROSECONDS.toNanos(microseconds); timeString.Append(microseconds).Append("μs"); } if (nanoSeconds > 0 || timeString.Length == 0) { timeString.Append(nanoSeconds).Append("ns"); } return(timeString.ToString()); }