Javascript时间与Java时间不同

Javascript time differs from Java time

本文关键字:时间 Javascript Java      更新时间:2023-09-26

我在同一台机器上运行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()之前。并且两者都在同一台机器上运行。

"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毫秒。Javascript调用不受此限制。

有了这些知识,一个人很容易和另一个人不一样,不正常。

请参阅关于Java Time的精度和准确性的扩展讨论