If I use System.currentTimeMillis() at 00:00 and I get X value.
System.currentTimeMillis()
X
Then I set the clock back one hour, and after one hour i call System.
System.
In a nutshell, whenever you change system time, the value returned by System.currentTimeMillis() will change accordingly.
This is in contrast to System.nanoTime().
System.nanoTime()