2012-04-24 116 views
1

我希望有人可以提供幫助。我試圖設置一個計時器,從遊戲開始到這個時間顯示。問題是下面的代碼段給了我錯誤的時間。它的格式不正確,已經過了一個小時。Android定時器 - 1小時不正確

private long startTime; 
private SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss.SS"); 

//Constructor: 
startTime = System.currentTimeMillis(); 

public String getTime() { 
long gameTime = System.currentTimeMillis() - startTime; 
final Date date = new Date(gameTime); 
return timeFormat.format(date); 
} 

它始終如一地給我輸出01:00:03:203。秒是正確的,但1小時不應該在那裏,格式是3小數位,而不是我認爲我指定的兩個小數位。

非常感謝!

+0

這不可能。你在getTime方法中從哪裏獲取'startTime'?是否與其他服務器/系統有任何溝通? – 2012-04-24 15:56:28

+0

startTime = System.currentTimeMillis();在類構造函數中執行。只有很多其他代碼不會影響這個問題,所以我把它排除了。 – user1354151 2012-04-24 16:04:28

回答

0

你的日期是epoch + gameTime。我認爲你正在經歷一個夏令時轉換,因爲當前你所在位置的DST與時代的DST不匹配。

使用日曆而不是日期。開始今天並明確全殲小時,分鐘等部分組成:

Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.HOUR_OF_DAY, 0); 
cal.set(Calendar.MINUTE, 0); 
cal.set(Calendar.SECOND, 0); 
cal.set(Calendar.MILLISECOND, 3600000 + 60000 + 1000 + 1); 

SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss.SS"); 

System.out.println(timeFormat.format(cal.getTime())); 

對於上面的輸出爲:01:01:01.01

http://ideone.com/DyQcl

替代的數字我有以上與gameTime,你就完成了。

當然,這可能不會工作,一旦你的毫秒滴答超過了一天的邊界。

+0

如果我添加如下代碼: 'final Date startDate = new Date(startTime); final Date currentDate = new Date(System.currentTimeMillis()); \t \t Log.d(「TIME ERROR」,「CURRENT TIME:」+ timeFormat.format(currentDate));我得到了正確的輸出:遊戲時間:17:12:58.231當前時間:17:13:05.775(「時間錯誤」,「遊戲時間:」+ timeFormat.format(startDate));' – user1354151 2012-04-24 16:16:47

+0

請檢查我更新的工作示例。 – 2012-04-24 16:17:28

+0

非常感謝。無論如何你的解決方案已經奏效=) – user1354151 2012-04-24 16:27:14