2017-04-16 101 views
-1

我需要計算兩次之間的時間。當它在Thread中調用時,System.currentTimeMillis()每次返回相同的值。 我的代碼是:System.currentTimeMillis()返回相同的時間戳

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // Other codes.. 
    start_sec = Math.round(System.currentTimeMillis()/1000); 
    fin = false; 
    runThread(); 
    // Other codes.. 
} 

private void runThread() { 
    new Thread() { 
     public void run() { 
      while (i++ < 61) { 
       if (!running) return; 
       try { 
        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          if(!fin){ 
           int len = Math.round(System.currentTimeMillis()/1000) - start_sec; 
           Log.d("current time: ",String.valueOf( Math.round(System.currentTimeMillis()/1000))); 
           Log.d("difference is: ", String.valueOf(len)); 
           if(len < 0 && len > 58){ 
            fin=true; 
           } 
           timerec.getLayoutParams().width = metrics.widthPixels *(60- len)/60; 
           timerec.requestLayout(); 
          } 
          else{ 
           end_game(); 
           running= true; 
          } 
         } 
        }); 
        Thread.sleep(1000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    }.start(); 
} 

下面是日誌:

... 
D/current time:: 1492337024 
D/difference is:: 0 
D/current time:: 1492337024 
D/difference is:: 0 
.... 

它returs相同的 「時間」。解決辦法是什麼?

回答

0

Math.round()導致的問題。

long len = System.currentTimeMillis()/1000 - start_sec; 
Log.d("current time: ",String.valueOf(System.currentTimeMillis()/1000)); 
Log.d("difference is: ", String.valueOf(len)); 

此代碼altought分。

0

需要時間。不要把它除以1000.時間差是秒的幾分之一。這就是爲什麼當你四捨五入時它顯示的時間相同。

0

while循環中兩個循環之間的差異遠小於一秒,並且當您以秒爲單位計算差值(您將當前毫秒分爲1000)時,它會使秒數相同,差值爲0秒。

嘗試以毫秒爲單位打印差異(不分割)。

0

試試這個:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // Other codes.. 
    start_sec = System.currentTimeMillis(); 
    fin = false; 
    runThread(); 
    // Other codes.. 
} 

private void runThread() { 
    new Thread() { 
     public void run() { 
      while (i++ < 61) { 
       if (!running) return; 
       try { 
        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          if(!fin){ 
           int len = System.currentTimeMillis() - start_sec; 
           Log.d("current time: ",String.valueOf( System.currentTimeMillis())); 
           Log.d("difference is: ", String.valueOf(len)); 
           if(len < 0 && len > 58){ 
            fin=true; 
           } 
           timerec.getLayoutParams().width = metrics.widthPixels *(60- len)/60; 
           timerec.requestLayout(); 
          } 
          else{ 
           end_game(); 
           running= true; 
          } 
         } 
        }); 
        Thread.sleep(1000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    }.start(); 
}