androidapproximatetimeunit

Request a better way to limit milli second digits


I was attempting to limit the number of milliseconds displayed in an Android UI, and I came up with this:

Long milli = TimeUnit.NANOSECONDS.toSeconds(nanos);
String partB = milli.toString().substring(0,2);
String partA = String.format("%d:%d:%d.",     
    TimeUnit.NANOSECONDS.toHours(nanos),
    TimeUnit.NANOSECONDS.toMinutes(nanos),    
    TimeUnit.NANOSECONDS.toSeconds(nanos));
return partA + partB;

I tried setting the String.format to "%d:%d:%d.%02d", but I still got the full 5 digit value returned for milliseconds.


Solution

  • This is the code I'm using in production

    public static String returnFormattedDuration(long nanos){
        Long days= TimeUnit.NANOSECONDS.toDays(nanos);
        nanos -= TimeUnit.DAYS.toNanos(days);
        Long hours=TimeUnit.NANOSECONDS.toHours(nanos);
        nanos -= TimeUnit.HOURS.toNanos(hours);
        Long minutes=TimeUnit.NANOSECONDS.toMinutes(nanos);
        nanos -= TimeUnit.MINUTES.toNanos(minutes);
        Long seconds= TimeUnit.NANOSECONDS.toSeconds(nanos);
        nanos -= TimeUnit.SECONDS.toNanos(seconds);
        Long millisec = TimeUnit.NANOSECONDS.toMillis(nanos);
        return days.toString()+":"+hours.toString()+":"+minutes.toString()+":"+seconds.toString()+"."+millisec.toString();
    }
    

    and it is working well