2011-09-19 2 views
0

DateField를 기반으로하는 카운트 다운과 관련된 문제가 있습니다.Blackfield의 TimeZones와 관련된 Datefield에 표시된 시간이 잘못되었습니다.

앱 - 값 매 초마다 , 필드의 값을 얻을 스레드를 시작하고 감소 - - 기본 값 (10 분) 포함하여 DateField를 설정할 새 값을 화면에 매 초마다 표시를

문제 시뮬레이터/장치가 GMT이면 모든 것이 잘 동작합니다. 그러나 DateField를 변경하면 결과 화면에 잘못된 값이 표시됩니다.

은 여기하여 DateField이고 기본값
long time = 1000*60*DEFAULT_PARKING;   
parkingTimePicker = new DateField("",time, DateField.TIME); 
TimeZone zone = TimeZone.getTimeZone("GMT"); 
parkingTimePicker.setTimeZone(zone); 

나중에 나머지 초 매초 감소 설정된다. 여기

스레드에서 남은 시간

이 HH 다시 초에서 번역 : mm : 여기 SS

public void showTimeLeft() 
{    
    private long timeLeft; //time left in Seconds 
    private SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); 
    private Date resultdate; 
    resultdate = new Date(timeLeft*1000); 
    mainScreen.setRemainingTimeLabel(sdf.format(resultdate)); 
} 

mainscreen

public void setRemainingTimeLabel(String text) 
{  
    remainingTimeLabel.setText(text); 
    add(new LabelField(System.currentTimeMillis()+"")); 
    add(new LabelField(text)); 
} 

에 값을 표시하는 방법을 잘 모르겠습니다 나는 실수를 저질렀지 만 시간대와 관련이 있다고 확신한다. 내 앱이 다른 시간대에 작동하는지 어떻게 확인할 수 있습니까?

답변

1

나는 DateField을 오용했다고 생각합니다. 타임 스탬프 (날짜 자체 + 날짜 포함)로 조작하도록 설계되었습니다. 예, DateField은 타임 스탬프의 시간 부분 만 표시 할 수 있지만 해당 생성자는 전체 시간 스탬프 (날짜 + 시간 부분 모두)를 나타내는 long을 필요로합니다. 따라서 long time = 1000*60*DEFAULT_PARKING을 전달하여 어떤 날짜에 전달합니까? 나는이 같은 것을 사용하는 것이 좋습니다 것 :

int millisSinceMidnight = 1000 * 60 * DEFAULT_PARKING; 
// Retrieves date relative to midnight on current day. 
Calendar dateCal = DateTimeUtilities.getDate(millisSinceMidnight); 
long time = dateCal.getTime().getTime(); 
parkingTimePicker = new DateField("", time, DateField.TIME); 

당신이 timeLeft을 계산 어떻게 불분명하다. 이 게시물을 읽거나 사용한 후에도 문제가 계속 발생하면 코드를 게시하십시오.

또한 SimpleDateFormat은 현재 기기의 시간대를 사용하여 시간을 포맷한다고 생각합니다. 따라서 사용자의 코드는 기기 시간대가 GMT 인 경우에만 작동합니다. 이 문제를 해결하려면이를 제거해야합니다 :

TimeZone zone = TimeZone.getTimeZone("GMT"); 
parkingTimePicker.setTimeZone(zone); 

그래서 같은 시간대 (장치에 전류) 모두 선택 도구 및 포맷 작업.

관련 문제