System.currentTimeMillis()返回相同的时间戳

时间:2017-04-16 10:10:23

标签: java android multithreading timestamp

我需要计算两次之间的时间。 System.currentTimeMillis()每次调用Thread时都会返回相同的值。 我的代码是:

@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
....

它回复同一时间&#34;。解决方案是什么?

4 个答案:

答案 0 :(得分:0)

花费时间。并且不要将它除以1000.时差是秒的一小部分。这就是为什么它与你四舍五入的同时显示的原因。

答案 1 :(得分:0)

while循环中两个循环之间的差异远小于一秒,当你用秒计算差值时(你将当前毫秒除以1000)它会产生相同的秒,差值为0秒。

尝试以毫秒为单位打印差异(不分割)。

答案 2 :(得分: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();
}

答案 3 :(得分: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。