Java脚本时间不同于 Java 时间

Javascript time differs from Java time

我是 运行 JavaServlet 和同一台机器上的 JavascriptApp。

servlet 输出当前时间:

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    ServletOutputStream os = resp.getOutputStream();
    os.print("" + System.currentTimeMillis());
}

JS获取时间:

$.get("UserdataServlet", function(data) {
            console.log("dy " + data);
            console.log("my " + Date.now());
        });

有时会打印如下值:

dy 1433690185937
my 1433690185935

怎么可能? Servlet上的时间是在javascript?并且两者在同一台机器上 运行。

"my 1433690185935" 应始终大于或至少等于 "dy 1433690185937"。但是怎么变小

是否是浏览器的某种优化?

更多示例:

GET http://localhost:8081/Planetserverlinux/UserdataServlet
dy 1433691257707
my 1433691257717

GET http://localhost:8081/Planetserverlinux/UserdataServlet
dy 1433691258716
my 1433691258719

GET http://localhost:8081/Planetserverlinux/UserdataServlet
dy 1433691259700
my 1433691259715

GET http://localhost:8081/Planetserverlinux/UserdataServlet
dy 1433691260700
my 1433691260720

GET http://localhost:8081/Planetserverlinux/UserdataServlet
dy 1433691261700
my 1433691261712

GET http://localhost:8081/Planetserverlinux/UserdataServlet
dy 1433691262704
my 1433691262701

由于您 运行 在 windows 机器上,因此 Java 获取时间的调用四舍五入到最接近的 16 毫秒。 Java脚本调用不受此限制。

有了这些知识,一个人就很容易与另一个人不一样,乱七八糟。

请参阅有关 precision and accurracy of Java Time

的扩展讨论