2012-04-24 3 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'을 어디에서 가져 옵니까? 다른 서버/시스템과의 통신이 관련되어 있습니까? –

+0

startTime = System.currentTimeMillis(); 클래스 생성자에서 수행됩니다. 이 문제에 영향을 미치지 않는 다른 많은 코드가 있으므로 생략했습니다. – user1354151

답변

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); 최종 날짜 currentDate = 새 날짜 (System.currentTimeMillis()); \t \t Log.d ("TIME ERROR", "CURRENT TIME :"+ timeFormat.format (currentDate)); Log.d ("TIME ERROR", "게임 시간 :"+ timeFormat.format (startDate)), ' 게임 시간 : 17 : 12 : 58.231 현재 시간 : 17 : 13 : 05.775 – user1354151

+0

업데이트 된 작동 예제를 확인하십시오. –

+0

대단히 감사합니다. 귀하의 솔루션은 어쨌든 작동했습니다! =) – user1354151