2011-09-19 57 views
0

相關的時區我有與基於將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使用當前設備時區格式化時間。所以你的代碼只有在設備時區爲格林威治標準時纔有效要解決這個你應該刪除這個:

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

所以在相同的時區(在設備上的電流)兩種選擇器和格式化工作。