I'm in an android widget and checking elapsed time between two calls of System.nanoTime() and the number is huge. How do you measure elapsed time with this? It should be a fraction of a second and instead it's much more. Thanks
Java System.nanoTime() huge difference in elapsed time
15.9k views Asked by Androider At
3
There are 3 answers
1
On
If you want it in fractional form, just take your value
/ 10^9 where value
is your difference in nanoTime()
s.
long nanoSeconds = 500000000;
float seconds = nanoSeconds / 1000000000;
Log.i("NanoTime", nanoSeconds + " ns is the same as " + seconds + " seconds");
Your output would be:
07-27 11:35:47.196: INFO/NanoTime(14237): 500000000 ns is the same as 0.5 seconds
The
System.nanoTime()
returns a time value whose granularity is a nanosecond; i.e. 10-9 seconds, as described in the javadoc. The difference between two calls toSystem.nanoTime()
that are a substantial fraction of a second apart is bound to be a large number.If you want a time measure with a larger granularity, consider
System.currentTimeMillis()
... or just divide the nanosecond values by an appropriate power of 10 to suit your application.Note that on the Android platform there are 3 distinct system clocks that support different "measures" of time; see
SystemClock
. If you are programming explicitly for the Android platform, you should read the javadoc and decide which measure is most appropriate to what you are doing.For your information, "nano-" is one of the standard prefixes defines by the International System of Units (SI) - see http://physics.nist.gov/cuu/Units/prefixes.html.
If you really think that "they" got it wrong and that "nano-" is too small, you could always write a letter to the NIST. I'm sure someone would appreciate it ... :-)