Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java System.currentTimeMillis();如果我改变系统时间_Java_Time - Fatal编程技术网

Java System.currentTimeMillis();如果我改变系统时间

Java System.currentTimeMillis();如果我改变系统时间,java,time,Java,Time,如果我在00:00使用System.currentTimeMillis()并得到X值 然后我将时钟拨回一小时,一小时后我调用System.currentTimeMillis() 它会再次返回X,还是只返回X+3600*1000简言之,无论何时更改系统时间,system.currentTimeMillis()返回的值都会相应更改 这与System.nanoTime()相反,它将返回X,因为返回自历元以来的毫秒数。这意味着它将与您的时钟同步,并计算自1970年1月1日UTC以来的秒数。在Androi

如果我在00:00使用
System.currentTimeMillis()
并得到
X

然后我将时钟拨回一小时,一小时后我调用
System.currentTimeMillis()


它会再次返回
X
,还是只返回
X+3600*1000

简言之,无论何时更改系统时间,
system.currentTimeMillis()
返回的值都会相应更改


这与
System.nanoTime()

相反,它将返回X,因为返回自历元以来的毫秒数。这意味着它将与您的时钟同步,并计算自1970年1月1日UTC以来的秒数。在Android上,您始终可以使用
SystemClock.elapsedRealtime()

根据javadoc,它返回当前时间与1970年1月1日UTC午夜之间的差值,以毫秒为单位。=>因此,如果你改变电脑的时钟,你可以期待它会被调整。我相信,这是不可能的。在不同的系统上,JDK必须跳过不同的环才能获得系统时间,并且可能不会总是对系统时钟的变化立即做出响应。我知道nanoTime(),但我听说它比currentTimeMillis贵20倍,所以我宁愿避免这种情况。我不需要太多的精度(半秒的误差可能非常好)。有其他选择吗?或者我应该使用nanoTime吗?@TwinOneAndroid 20次几个cpu周期仍然不多,除非你称之为每秒数千次。。。更多信息。@TwinOneAndroid用于测量时间跨度,我认为您应该始终使用
nanoTime()
。(我记不起确切的原因了,在某些方面与系统时间的行为违反直觉有关。因此,请恕我直言。)nanoTime()的要点是,当系统时钟以某种方式调整时,它不会改变,因此两个时间戳分开一段时间后,将正确反映时间跨度,不考虑时钟调整。@HotLicks另一个问题是
currentTimeMillis()
的粒度取决于操作系统,而实际上,
nanoTime()
的分辨率应该在1ms以下。(路过)