如何在android上设置计时器的时区?
计时器滴答作响 但当我用下面的公式来计算时间流逝的时候 %%SystemClock.elapsedRealtime()-cArg.getBase() 它增加了12个小时(精确到分和秒) 看来我得设定时区了。但我不知道该怎么办。请帮帮我如何在android上设置计时器的时区?,android,chronometer,Android,Chronometer,计时器滴答作响 但当我用下面的公式来计算时间流逝的时候 %%SystemClock.elapsedRealtime()-cArg.getBase() 它增加了12个小时(精确到分和秒) 看来我得设定时区了。但我不知道该怎么办。请帮帮我 private Chronometer jobTimerDisplay; protected void onCreate(Bundle savedInstanceState) { jobTimerDisplay = (Chronometer) findViewBy
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类,在这种情况下,我建议重命名它以避免混淆)