Часы на приборной панели меняются по мере изменения системного времени - PullRequest
0 голосов
/ 31 августа 2011

Мое требование: часы на дисплее не должны изменяться при изменении времени клиента системы.У меня есть сервер 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;
    }

В 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;


         } 
      });
  }

Пожалуйста, помогите ... Где я иду не так, тер лучше ли это сделать ???

Как запретить приборной панели использовать терминальные часы и использовать только серверные часы

Ответы [ 2 ]

0 голосов
/ 31 августа 2011

Пока вы используете любой код, такой как

new Date(); //or
Date.now(); //if you like milliseconds

, вам нужен какой-то способ обновления разницы во времени между сервером и клиентом.Одним из решений было бы использовать window.setInterval , скажем, с задержкой 1000 мс и посмотреть, изменилось ли время клиента на величину, значительно отличающуюся от 1000 мс.Если это так, вам необходимо выполнить повторную синхронизацию с сервером.

Например,

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, но выТ надо.

0 голосов
/ 31 августа 2011

Если вы укажете его на клиентских часах, он сломается, когда пользователь изменит часы, так как меняется контрольная точка.

Как определить, когда пользователь изменяет его?

Отслеживать предыдущее время при обновлении дисплея.Если предыдущее время значительно отличается, вы можете перенастроить на millDiff.

Примечание: Время НИКОГДА будет точным из-за временидля запроса на перемещение по сети и времени, которое требуется для отображения страницы на клиенте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...