2012-06-02 19 views
7

我從具體時間開始計時錶有問題。 有一個Date對象我想從我的計時錶開始:如何從Date對象設置Android Chronometer基準時間?

Date d = new Date(); //now, just for example 
chronometer.setBase(d.getTime()); //long value of d 
Log.d("Date: " , "d.getTime() time is [" + d.getTime() +"]"); 
Log.d("Chron: " , "chronometer.getBase() is [" + chronometer.getBase() +"]"); 
//let's print out elapsedRealtime from official sample 
Log.d("Chron: " , "SystemClock.elapsedRealtime() is [" + SystemClock.elapsedRealtime() +"]"); 

輸出:

06-02 13:35:23.025: D/Date:(928): d.getTime() time is [1338644123032] 
06-02 13:35:23.037: D/Chron:(928): chronometer.getBase() is [1338644123032] 
06-02 13:35:23.037: D/Chron:(928): SystemClock.elapsedRealtime() is [11624388] 

其實,爲什麼這個很長一段時間differes(11624388和1338644123032)的值?

當我開始我的天文臺從基地

chronometer.setBase(SystemClock.elapsedRealtime()); 

- 它總是工作正常(「00:00」和上升)

但是,當我嘗試設置從過去的日期之日起(FE昨天):

chronometer.setBase(yesterday.getTime()); 

- 它顯示 「00:0(」 和改變每秒最新的char 「)」, 「*」, 「/」 等

你能告訴我如何設置天文臺基地日期對象?

回答

3

其實,爲什麼這個長時間的值不同(11624388和1338644123032)?

SystemClock.elapsedRealtime()是設備開啓後的毫秒數。其他值基於System.currentTimeMillis(),自Unix時代以來的毫秒數。

請問您可以告訴我如何將計時器底座設置爲Date對象?

你不知道。這不是Chronometer的用途。引用the documentation for Chronometer

你可以給它的開始時間在elapsedRealtime()時基,並從該計數,或者如果你不給它一個基地的時候,它會使用時間上,你調用start()。

+0

感謝馬克。我的目標是創建一個數字時鐘,顯示兩個活動(存儲在數據庫中的時間記錄)之間的持續時間。你能爲此建議最佳實踐嗎? – Vitalliuss

+1

@Vitalliuss:如果您的開始和結束時間都固定在數據庫中,那麼只需使用'TextView',因爲您的值不會改變。如果你的開始時間在數據庫中是固定的,並且你從那裏開始計算,那麼你需要創建你自己的'Chronometer'等價物,它在'System.currentTimeMillis()'時間基準中開始時間,而不是'elapsedRealtime() '。由於['Chronometer'不是一個很長的類](https://github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/Chronometer.java),克隆它並讓你自己應該是相當容易。 – CommonsWare

+0

將嘗試爲我的項目重寫天文臺。非常感謝! – Vitalliuss

19

我實際上有一個類似的問題(日期來自外部服務,而不是數據庫),我想顯示日期是多大。

它被證明是簡單的:

long lastSuccess = serviceDate.getTime(); //Some Date object 
long elapsedRealtimeOffset = System.currentTimeMillis() - SystemClock.elapsedRealtime(); 
pollAgeView.setBase(lastSuccess - elapsedRealtimeOffset); 
pollAgeView.start(); 
+2

這比重寫'Chronometer'接受'Date'更合理的方法,並且比當前接受的答案更好地回答問題。 –

+0

太棒了!比接受的答案好得多。 – MidasLefko

+0

這不是一個好的理念,因爲用戶可以更改設備的日期。那麼如何在不使用系統基準時間的情況下從服務器實時計算真實的日期時間? –

相關問題