2013-02-01 74 views
2

我有一個鬧鐘應用程序,我將鬧鐘存儲到數據庫中。所有的警報工作正常,數值(毫秒)存儲爲正確的數字。現在我試圖從我的數據庫中顯示這些時間。和我使用一個日曆中檢索的時間在時間​​格式:Android日曆顯示錯誤時間

Calendar calendar = Calendar.getInstance(); 
SimpleDateFormat timeformat = new SimpleDateFormat("HH:mm"); 

milis = c.getInt(2); 
calendar.setTimeInMillis(milis); 
vreme = timeformat.format(calendar.getTime()); 
listavreme.add(vreme); 

Milis取出作爲從Cursor(測試),但是當我顯示在HH的getTime()右邊的數字:mm格式是總是顯示一小時。因此,如果milis值爲:61200000(17:00),日曆顯示爲18:00。我無法弄清楚。

回答

3

我認爲你必須時區設置爲你的位置 嘗試

timeformat.setTimeZone(TimeZone.getTimeZone("GMT")); 

例如

+0

謝謝你是對的! – user1880779

+1

你好:-) –

1

Calendar.getInstance()將被捆綁到一個時區。如果您沒有專門給出它,它將使用JRE的默認值。我想你的是GMT + 1。所以,因爲你沒有時區(正確)保存你的生毫米,它正在失去那個小時。試試:

 
    TimeZone utc = TimeZone.getTimeZone("UTC"); 
    Calendar calendar = Calendar.getInstance(utc); 
+0

所以最好只保存它已經綁定到一個時區? – user1880779

+0

不唔好! :)你做得對。總是保存日期和時間而不用時區。時區應該只是爲用戶界面裝飾 - 僅此而已。所有存儲的內容都應該是純淨的UTC。 –

+0

所以我只是在設置時區時處理用戶?你知道什麼是奇怪的嗎?我的時區是gmt + 1,所以當然是手機,但是當我把calendar.setTimeZone(TimeZone.getTimeZone(「GMT + 1」));'同樣的事情發生(時間顯示1小時多餘),它只有格林尼治標準時間,爲什我以爲我必須把它設置到我的時區? – user1880779