Java 仪表板中的时钟随着系统时间的变化而变化

Java 仪表板中的时钟随着系统时间的变化而变化,java,javascript,datetime,Java,Javascript,Datetime,我的要求是,显示器上的时钟不应该改变,因为我改变了系统的客户端时间。 我有jboss服务器。有一个仪表板应该显示服务器时间。我已经做了一些编码,但是当我改变系统计时时,时钟在仪表板上也会改变。下面是我的代码 从课堂上我得到了服务器时间 public Date getServerDateTime() throws Exception { Date serverDateTime = null; try { serverDateTime = new

我的要求是,显示器上的时钟不应该改变,因为我改变了系统的客户端时间。 我有jboss服务器。有一个仪表板应该显示服务器时间。我已经做了一些编码,但是当我改变系统计时时,时钟在仪表板上也会改变。下面是我的代码

从课堂上我得到了服务器时间

public Date getServerDateTime() throws Exception {
        Date serverDateTime = null;

        try {
          serverDateTime = new java.util.Date();    

          System.out.println("ServerDateTime-->" +serverDateTime);

        }catch(Exception e ){
            e.printStackTrace();
        }
        return serverDateTime;
    }
手稿

 var month          =   new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"); 
 var weekday        =   new Array("Sun","Mon","Tue","Wed","Thu","Fri");
 //Time Display format -Mon May 16 16:48:04 2011
  //Users time   
  var timeLocal;   
  //Servers time   
  var timeServer;  
  //mill diff between local time and server time
  var  millDiff;      

  //The clock to tick function   
  function toTick(){   
        timeLocal = new Date();   
    //add time difference   
    timeLocal.setMilliseconds(timeLocal.getMilliseconds() - millDiff);   

    //display the value   
    document.getElementById("dateAndTime").innerHTML = month[timeLocal.getMonth()]+" "+(timeLocal.getDate() < 10 ? '0'+timeLocal.getDate() : timeLocal.getDate())+", "+timeLocal.getFullYear()+" "+(timeLocal.getHours() < 10 ? '0'+timeLocal.getHours() : timeLocal.getHours())+":"+(timeLocal.getMinutes() < 10 ? '0'+timeLocal.getMinutes() : timeLocal.getMinutes())+":"+(timeLocal.getSeconds() < 10 ? '0'+timeLocal.getSeconds() : timeLocal.getSeconds());
  }

  /** Display Server date and time in header section ends **/
  /**
   * This function will send a remote call to the server and display the date and time in the
   * gui at the header area
   */
    function getServerDateTime(){
        CommonRemoteCall.getServerDateTime({
         callback:function(datetime) {
           document.getElementById("dateAndTime").innerHTML = month[datetime.getMonth()]+" "+(datetime.getDate() < 10 ? '0'+datetime.getDate() : datetime.getDate())+", "+datetime.getFullYear()+" "+(datetime.getHours() < 10 ? '0'+datetime.getHours() : datetime.getHours())+":"+(datetime.getMinutes() < 10 ? '0'+datetime.getMinutes() : datetime.getMinutes())+":"+(datetime.getSeconds() < 10 ? '0'+datetime.getSeconds() : datetime.getSeconds());
             //Server time 
             timeServer = datetime;

               //Users time 
             timeLocal = new Date();

             //Calculate the difference (returns milliseconds)   
             millDiff = timeLocal - timeServer;


         } 
      });
  }
var-month=新数组(“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”);
var weekday=新数组(“Sun”、“Mon”、“Tue”、“Wed”、“Thu”、“Fri”);
//时间显示格式-2011年5月16日星期一16:48:04
//用户时间
时间局部变异;
//服务器时间
var时间服务器;
//本地时间和服务器时间之间的最大差异
米尔迪夫变种;
//时钟滴答作响的功能
函数toTick(){
timeLocal=新日期();
//加时差
timeLocal.setmillizes(timeLocal.getmillizes()-millDiff);
//显示值
document.getElementById(“dateAndTime”).innerHTML=month[timeLocal.getMonth()][10'-0'+timeLocal.getDate():timeLocal.getDate())+,“+timeLocal.getFullYear()+”+(timeLocal.getHours()<10?'0'+timeLocal.getHours():timeLocal.getHours())+:“+”:”+(timeLocal.getMinutes()<10?'0'+timeLocal.getMinutes()):timeLocal.getMinutes())+“:”+(timeLocal.getSeconds()<10?'0'+timeLocal.getSeconds():timeLocal.getSeconds());
}
/**在页眉部分显示服务器日期和时间结束**/
/**
*此函数将向服务器发送远程调用,并在
*标题区的gui
*/
函数getServerDateTime(){
CommonRemoteCall.getServerDateTime({
回调:函数(日期时间){
document.getElementById(“dateAndTime”).innerHTML=month[datetime.getMonth()]+“(datetime.getDate()<10?+datetime.getDate():datetime.getDate())+”,“+datetime.getFullYear()+”+((datetime.getHours()<10?+datetime.getHours())+”:“+(datetime.getMinutes()<10?+datetime.getMinutes():datetime.getMinutes())+”:”+(datetime.getSeconds()<10?'0'+datetime.getSeconds():datetime.getSeconds());
//服务器时间
timeServer=datetime;
//用户时间
timeLocal=新日期();
//计算差值(返回毫秒)
millDiff=timeLocal-timeServer;
} 
});
}
请帮忙……我哪里做错了,有没有更好的方法


如何防止dashbord使用终端时钟并仅使用服务器时钟如果以客户端时钟为基础,则由于参考点发生变化,当用户更改时钟时,时钟将中断

您如何检测用户何时更改它?

更新显示时,请跟踪上一次。如果之前的时间差异很大,您可以通过
millDiff
重新调整


注意:由于请求在网络上传输所需的时间以及页面在客户端上呈现所需的时间,因此时间永远不会精确

只要您使用的代码如下

new Date(); //or
Date.now(); //if you like milliseconds
您需要某种方法来更新服务器和客户端之间的时差。一种解决方案是使用1000毫秒的延迟,看看客户机时间是否发生了与1000毫秒明显不同的变化。如果有,您需要与服务器重新同步

例如:

var lastTimeLocal=null;
var区间=1000;
var fudge=0.05;
setInterval(函数(){
var thisttime=Date.now();
if(lastTimeLocal==null)
返回;
var delta=此时间-上次时间局部;
lastTimeLocal=这次;
如果(δ<区间*(1.0-福吉)| |δ>区间*(1.0+福吉))
getServerDateTime();
},间隔);

最好将其折叠到您的
toTick
功能中,但您不需要这样做。

您的意思是用户在加载页面后更改时钟?[现实生活中是谁做的?]我想问题是仪表板时钟跟随终端时钟,而不是服务器时钟。不管是否有任何时钟正在改变…所以需要做些什么???有什么解决方案??
var lastTimeLocal = null;
var interval = 1000;
var fudge = 0.05;
window.setInterval(function() {
    var thisTime = Date.now();
    if(lastTimeLocal == null)
      return;
    var delta = thisTime - lastTimeLocal;
    lastTimeLocal = thisTime;
    if(delta < interval * (1.0 - fudge) || delta > interval * (1.0 + fudge))
      getServerDateTime();
}, interval);