Javascript时间与Java时间不同

时间:2015-06-07 15:20:41

标签: java javascript servlets 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中的Date.now()之前进行的?两者都在同一台机器上运行。

"我的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

1 个答案:

答案 0 :(得分:3)

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

有了这些知识,一个人就很容易与另一个人不同,而且不按顺序。

请参阅有关precision and accurracy of Java Time

的SO的详细讨论