2010-12-05 91 views
4

我有一個Android應用程序,可以使用GPS模塊和SQLite數據庫。在開始時,一切都聽起來很不錯,但是當我需要使用Date()和時區時,恐怖就會出現。Android Date Date Timezones驅動我堅果

一點背景

GPS模塊有可能從衛星獲取日期。這是一件好事,我需要在我的應用程序中確保有效的數據。從它返回的日期是GMT時間。 此日期作爲StartTime插入到本地數據庫的一個字段中。 StartTime以AES加密存儲。當我解密StartTime時,我需要將它轉換爲Date並將格式保留爲GMT。

我做什麼 獲取LocationListener的從GPS數據:具有默認的GPS日期轉換在設備的當前時區新的Date()

gpsDate = new Date(location.getTime()); 

。因此,我沒有一個不錯的Sun Dec 05 14:00:00 GMT 2010 time,我得到Sun Dec 05 16:00:00 GMT + 2 2010。它爲什麼這樣做?我只是想從getTime()中取出一個新日期。

我插入數據在數據庫:

SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
outputFormat.setTimeZone(TimeZone.getTimeZone("GMT")); 
String date = outputFormat.format(gpsDate); 

我檢索日期,當我需要它:

SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
outputFormat.setTimeZone(TimeZone.getTimeZone("GMT")); 
String myStored = {decrypy from the database} 
Date myStartDate = outputFormat.parse(myStoredDate); 

myStored顯示:2010-12-05 14:00

myStartDate顯示:Sun Dec 05 16:00:00 GMT + 2 2010

這裏有一些我很想念的東西。我需要能夠以格式獲取日期,插入,轉換,比較,計算差異。只有當我需要顯示給他時,我需要用戶時區中的日期。

請照亮我。

+1

爲什麼你需要一個DATE對象,如果你只是想把它放在數據庫中。只要把你從location.getTime() – Falmarri 2010-12-05 20:28:17

+0

得到的時間,這是一個很好的點...我會嘗試看看它是如何工作的。 – Alin 2010-12-05 20:52:45

回答

2

該問題看起來是,您沒有存儲時區。您自己說過,myStored在從您存儲的任何位置進行檢索時會返回,而無需TZ。然後,當你對它進行解析時,你強迫它使用GMT。由於格林尼治標準時間與當地時區有2小時不同,因此時間有2小時不同。

簡而言之,您應該可以使用sattelite時間,使用帶有z或Z選項的simpledateformat將輸出格式化爲存儲它的任何位置。你甚至不應該使用setTimezone方法。然後使用與以前相同的dateformatter,而不是一個新的,從您存儲它的位置解析傳入的日期。

完成此操作後,在將輸出發送給用戶之前,請確定其時區,然後在您擁有的數據上設置時區。