One fact of System.nanoTime() ,
I think System.nanoTime()'s contract right now is that it *always* increases by a fixed amount. In other words, it's monotonic. So NTP updates, or user's changing system time can never cause any change to System.nanoTime().
https://jsr-310.dev.java.net/servlets/ReadMsg?list=dev&msgNo=1282 A more detailed explanation of nanoTime() and currentMilliSecond() - http://blogs.sun.com/dholmes/entry/inside_the_hotspot_vm_clocks http://blog.joda.org/2014/11/converting-from-joda-time-to-javatime.html