当前位置: 首页 > 面试题库 >

System.currentTimeMillis()在Windows XP上不正确?

司空镜
2023-03-14
问题内容

看来System.currentTimeMillis不是很准确。

看到这个例子:

public class MillisTime {
    public static void main(String[] args) {
        long start = 0;
        long end = 0;
        while (true) {
            if (start == 0) {
                start = System.currentTimeMillis();
            } else {
                long current = System.currentTimeMillis();
                if (current != start) {
                    end = current;
                    break;
                }
            }
        }
        System.out.println("The time interval of your OS: " + (end - start) + "ms");
    }
}

结果是(在Windows XP上):

The time interval of your OS: 15ms

为什么不是1ms呢?以及如何获得当前时间的精确毫秒数?


问题答案:

这是完全可以预期的。您会在.NET上使用看到相同的东西DateTime.Now。(有关该主题的面向.NET的观点,请参阅Eric
Lippert的博客文章。)

您可以使用System.nanoTime()来获得更精确的计时器
,仅用于测量 -这并不意味着要给出 绝对的 时间,而只是用于测量 间隔

我不知道从Java或Win32获得任何更准确的绝对时间的任何方法。老实说,系统时钟到底有多精确?即使与NTP服务器进行定期同步,我也希望至少有几毫秒的误差。

基本上,如果您依赖于真正准确地获取绝对时间,则可能应该更改设计。



 类似资料:
  • 问题内容: Accuracy Vs. Precision 我想知道的是在更新对象在游戏中的位置时应该使用System.currentTimeMillis()还是System.nanoTime()?他们的运动变化与自上次通话以来经过的时间成正比,我想尽可能地精确。 我已经读到不同操作系统之间存在一些严重的时间分辨率问题(即Mac / Linux的分辨率几乎为1毫秒,而Windows的分辨率为50毫秒

  • 我正在使用TestNG编写单元测试。问题是当我模拟System.CurrentTimeMillis时,它返回的是实际值,而不是模拟的值。理想情况下,它应该返回0L,但它返回的是实际值。我该怎么做才能继续?

  • 问题内容: 我想以毫秒为单位获取当前UTC时间。我搜索了google,并得到了一些System.currentTimeMillis()确实返回UTC时间的答案。但事实并非如此。如果我执行以下操作: 这三个时间几乎都相同(由于通话,相差以毫秒为单位)。 这不是UTC时间,而是我的时区时间。如何在Android中获取当前UTC时间? 问题答案: 您显示的所有三行都将给出自unix纪元以来的毫秒数,这是

  • 问题内容: 您能否说明一下如何为默认系统时区和给定时区获取正确的纪元时间(以毫秒为单位)。 给定 1.时区:GMT + 3 2.以下代码段: 3.输出: 4. System.currentTimeMillis()的 JavaDoc,它指示返回值将是 当前时间与UTC 1970年1月1日午夜之间的差(以毫秒为单位)。 所以为什么 at 的输出与of的输出相同,尽管提及的文档? at 的输出与有所不同

  • 我有一个非常令人困惑的问题,关于我的pdf中生成的饼图中的Unicode支持。这是我所拥有的:我正在生成饼图(使用jfreechart库),需要在饼图的标题上添加上标。我测试了,我知道jfreechart正在生成正确的标题(上标很好),我还测试了它的文本Unicode支持。有一个Graphics2D(来自java awt),它将jfreechart变成一个模板,然后我可以将这个模板打印到我的pdf

  • 我从Ruby on Rails webservice以Unix时间戳格式获取当前时间(即1970年1月1日起的秒),服务器上的时区是UTC。 在Java中,我试图将本地当前时间转换为UTC时间。但每次都是提前6分钟。我想得到UTC当前时间和服务返回时间的差值。我的Java代码是- 其中服务器时间是我从网络服务获得的时间。resTime 的值显示负值,约为 6 分钟。 所以我的问题是为什么UTC时区