我的要求是,显示器中的时钟不应该随着我改变系统的客户端时间而改变。 我有jboss服务器..应该显示服务器时间的仪表板..我做了一些编码但是当我改变我的系统时序时,时钟也在dahsboard中改变。这就是我的代码..
从课程我得到了servertime
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;
}
在javscript中
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;
}
});
}
请帮助..我在哪里做错了,有没有更好的办法呢?
如何防止dashbord使用终端时钟并仅使用服务器时钟
答案 0 :(得分:0)
如果您将其作为客户端时钟的基础,那么当用户更改时钟时它会因参考点更改而中断。
如何检测用户何时更改?
跟踪更新显示屏时的上一次。如果前一时间显着不同,您可以通过millDiff
重新调整。
注意:由于请求通过网络传输所需的时间以及页面所需的时间,时间从不准确无误在客户端上呈现。
答案 1 :(得分:0)
只要您使用任何代码,例如
new Date(); //or
Date.now(); //if you like milliseconds
您需要某种方式来更新服务器和客户端之间的时差。一种解决方案是使用window.setInterval,例如1000ms延迟,并查看客户端时间是否已经改变了与1000ms明显不同的数量。如果有,则需要与服务器重新同步。
如,
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);
最好将其折叠到toTick
函数中,但不需要。