android - 计时器不是从零开始

时间:2012-12-14 17:39:05

标签: java android chronometer

我正在尝试在Android中制作一个包含小时和毫秒的秒表。我的计时器始终以7:00:00000或24小时格式19:00:00.000开始。这是代码:

public class MainActivity extends Activity {
   TextView tv;
   long init,now,time;

   @Override
   public void onCreate(Bundle savedInstanceState) {
       //...
       myChronometer.setOnChronometerTickListener(new OnChronometerTickListener() {
            public void onChronometerTick(Chronometer cArg) {
                SimpleDateFormat timeFormat = new SimpleDateFormat("hh:mm:ss.S");
                now=System.currentTimeMillis();
                time=now-init;
                String s2 = timeFormat.format(time);
                tv.setText(s2);
            }
        });
       final ImageButton buttonStart = (ImageButton)findViewById(R.id.start);
       buttonStart.setOnClickListener(new Button.OnClickListener(){
       @Override
       public void onClick(View v) {
           init=System.currentTimeMillis();
           myChronometer.setBase(init);
           myChronometer.start();
       }});

   }

}

无论如何都要将计时器从零开始并从那里继续时间? 谢谢

2 个答案:

答案 0 :(得分:4)

7小时的差异可能是由于您的时区造成的。 SimpleDateFormat默认使用系统的时区,而System.currentTimeMillis()则以UTC为单位给出时间。

这可以解决你的问题,在onChronometerTick():

SimpleDateFormat timeFormat = new SimpleDateFormat("H:mm:ss.S");
timeFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
now=System.currentTimeMillis();

注意我在格式字符串中将hh更改为H.

答案 1 :(得分:3)

在我看来,计时器使用当前时间作为开始。 您可能不应该使用

init=System.currentTimeMillis();

如果你想开始0,但是

init=0;

希望这有帮助