2013-06-11 22 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類,在這種情況下,我建議重命名它以避免混淆)。