我正在创建一个 Java Application ,其中OS的系统时钟会不时调整。 (所以它就像是点对点的NTP实验)
我正在寻找类似于虚拟时钟的Java构造,其中我仍然可以在执行时以毫秒为单位获取应用程序的时代。因为如果我总是只使用System.currentTimeMillis()
,那么它可能会给我错误的申请年龄。
有类似的东西吗?没有真正为它创建另一个线程?
答案 0 :(得分:1)
无法直接在Java中执行此操作,唯一的解决方法是记录应用于系统时钟的时差,并在应用程序中考虑这一点。
当然,这在很大程度上取决于底层操作系统和用于调整系统时钟的工具。
答案 1 :(得分:1)
要计算程序的已用时间,您有多种可能性。并非所有程序都适合您的程序,因为您的程序运行时系统时间可能会发生变化。
使用该方法,您可以获得系统的当前时间(以毫秒为单位)。如果要计算程序的运行时间,可以将currentTime保存在long变量中。如果您需要程序所需的时间,您只需使用已保存的当前时间减去当前时间。
节省程序启动的时间!
long start = System.currentTimeMillis();
减去结束时间和开始时间!
long need = System.currentTimeMillis() - start;
请注意,如果您更改 系统时间,则会出现错误的时间!
使用nanoTime,您可以获得以纳秒为单位的虚拟Java机器的运行时间。如果要计算经过的时间,则必须像使用currentTimeMillis()一样。在开始时节省时间,最后减去时间。
节省程序启动的时间!
long start = System.nanoTime();
减去结束时间和开始时间!
long need = (System.nanoTime() - start) / 1000000; // divide to get millisecounds
请记住,即使您更改 系统时间,您也会获得正确的时间,因为您使用的是虚拟时间Java机器!
您只能使用System.nanoTime()
获得正确的已用时间。您不应该使用System.currentTimeMillis()
,除非您不介意结果是错误的。 currentTimeMillis()
用于衡量“挂钟”时间。当您的系统时间更新时,您只是错误的时间。 nanoTime()
对此非常生气,你计算经过的时间。