2013-06-11 21 views
0

计时表的滴答工作 但是,当我试图通过使用下面的公式得到多少时间。如何在android上设置天文台时区?

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

它增加了多12小时(分,秒是精确)

好像我必须设置时区。但我不知道该怎么办。 PLZ帮助我。

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)); 

     }}); 

回答

1

Chronometer.getBase()返回一个长表示UTC时间的它的基础 - 在你的情况下,当天文台构建的时间。

这不是你的主要问题,但对精度,你应该调用

jobTimerDisplay.setBase(System.currentTimeMillis()); 

之前

jobTimerDisplay.start(); 

以便引用,而不是时间的开始时间时,天文台被修建了。

真正的问题是,您正在比较天文台的基准时间(绝对时间点)与Android设备运行的时间长度。

你可能需要的是记时计的基准时间与当前时间比较:

long elapsedTime = System.getCurrentTimeMillis() - cArg.getBase(); 

要知道,在Java中(和大多数语言)的日期没有时区。 日期将它们的时间存储为距离Java Epoch日期(UTC)的长偏移量。 在格式化日期之前,您不会获得时区,可以通过明确格式化, 或通过显式或隐式调用它的toString()方法(例如在System.out.println语句中使用它)。

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