如何在android上设置计时器的时区?

如何在android上设置计时器的时区?,android,chronometer,Android,Chronometer,计时器滴答作响 但当我用下面的公式来计算时间流逝的时候 %%SystemClock.elapsedRealtime()-cArg.getBase() 它增加了12个小时(精确到分和秒) 看来我得设定时区了。但我不知道该怎么办。请帮帮我 private Chronometer jobTimerDisplay; protected void onCreate(Bundle savedInstanceState) { jobTimerDisplay = (Chronometer) findViewBy

计时器滴答作响 但当我用下面的公式来计算时间流逝的时候

%%SystemClock.elapsedRealtime()-cArg.getBase()

它增加了12个小时(精确到分和秒)

看来我得设定时区了。但我不知道该怎么办。请帮帮我

private Chronometer jobTimerDisplay;
protected void onCreate(Bundle savedInstanceState) {
jobTimerDisplay = (Chronometer) findViewById(R.id.chronometer_Working);
jobTimerDisplay.start();
}


jobTimerDisplay.setOnChronometerTickListener(new OnChronometerTickListener() {
public void onChronometerTick(Chronometer cArg) {

         long t = SystemClock.elapsedRealtime() - cArg.getBase();
         sec.setText(DateFormat.format("ss", t));
         min.setText(DateFormat.format("mm", t));
         hour.setText(DateFormat.format("h", t));

        }});
getBase()返回一个long值,表示其基准的UTC时间——在您的例子中,是构建计时器的时间

这不是您的主要问题,但为了准确起见,您可能应该调用

 jobTimerDisplay.setBase(System.currentTimeMillis());
就在之前

jobTimerDisplay.start();
因此,您参考的是开始时间,而不是建造计时器时的时间

真正的问题是,你正在比较天文钟的基准时间(这是一个绝对时间点)和Android设备运行的时间长度

您可能需要将计时器的基准时间与当前时间进行比较:

 long elapsedTime = System.getCurrentTimeMillis() - cArg.getBase();
请注意,Java(和大多数语言)中的日期没有时区。 日期将其时间存储为与Java纪元日期的长偏移量,单位为UTC。 只有通过显式格式化日期,才能获得时区, 或者显式或隐式调用它的toString()方法,比如在
System.out.println
语句中使用它

一旦解决了这个问题,就可以继续处理DateFormat类不格式化long,而是格式化日期的事实(除非您有一个自定义DateFormat类,在这种情况下,我建议重命名它以避免混淆)