Search code examples
androidshelladbmksh

How to measure time from adb shell with milliseconds resolution?


How can I measure time from adb shell with milliseconds or nanoseconds resolution?

Usingdate +%.%N from adb shell returns 1401546811.N (seconds resolution) instead of something like 1401547289.231869798 (nanoseconds resolution).

How can I get either milliseconds or nanoseconds resolution from adb shell?

Is there some terminal program that I can use to give me this? I am able to measure time using System.currentTimeMillis() and System.nanoTime() from Android application code itself, but I also need something from within adb shell.


Solution

  • mksh (the standard Android shell since version 4.0) has a built-in EPOCHREALTIME environment variable:

    Time since the epoch, as returned by gettimeofday(2), formatted as decimal tv_sec followed by a dot . and tv_usec padded to exactly six decimal digits.

    So the command to get epoch time with microsecond accuracy in Windows would be:

    adb shell echo $EPOCHREALTIME
    

    or in Linux:

    adb shell 'echo $EPOCHREALTIME'
    

    If you just need millisecond accuracy:

    adb shell 'echo ${EPOCHREALTIME:0:14}'
    

    Or just the milliseconds part to use with another time format:

    adb shell 'echo $(date +%T)${EPOCHREALTIME:10:4}'