2017-04-01 65 views
-3

Iam面臨啓動計時器以及如何將數據放入日期中的問題。 這是我的代碼從用戶處輸入小時分秒,並以hh:mm:ss格式開始倒計時

Calendar cl = Calendar.getInstance(); 
cl.set(Calendar.HOUR, 0); 
cl.set(Calendar.MINUTE, 0); 
cl.set(Calendar.SECOND, 0); 
cl.add(Calendar.HOUR, hr); 
cl.add(Calendar.MINUTE, min); 
cl.add(Calendar.SECOND, sec); 
Date date = cl.getTime(); 
Timer t =new Timer(1000, new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent ae) { 
    SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss"); 
    jLabel2.setText(timeFormat.format(date)); 
    } 
}); 
t.start(); 

是否正確使用Calendar放置在最新數據,並開始計時?

+0

這是功課嗎? – Tarik

+0

其我的項目,它可以同時運行多個定時器 可以幫助我爲我的問題提供示例代碼 –

+3

Madishetty,我在1986年一直是CS的學生。當時我們沒有互聯網。現在你已經有了所有需要的在線文檔。閱讀和學習是你的工作。你必須挖掘,直到你找到解決方案。否則,你如何期望成爲一名軟件開發人員? – Tarik

回答

3

我不認爲你應該使用Calendar這個。 A Calendar用於表示日曆時間中的點,而不是以小時,分鐘和秒爲單位的持續時間。此外,Calendar現在是舊的東西,並在Java 8中被新的和更多程序員友好的類取代(請參閱java.time包)。

我從意見中瞭解到你想要一個倒數計時器。我建議:

Timer t = new Timer(1000, new ActionListener() { 
     Duration time = Duration.ofHours(hr).plusMinutes(min).plusSeconds(sec); 
     @Override 
     public void actionPerformed(ActionEvent ae) { 
      time = time.minusSeconds(1); 
      jLabel2.setText(formatDuration(time)); 
     } 
    }); 
    t.start(); 

我現在用的是Duration類,介紹了Java中的類8.它是專爲以小時,分鐘和秒的持續時間之一,所以這是我們所需要的工作。雖然它不適合格式化。您可以使用它的toString方法,它會給你一個像PT9M52S這樣的字符串,持續9分52秒,可能並不是大多數用戶找到最直接的方式。相反,我正在使用此輔助方法進行格式化:

static String formatDuration(Duration dur) { 
    long hr = dur.toHours(); 
    Duration remainder = dur.minusHours(hr); 
    long min = remainder.toMinutes(); 
    long sec = remainder.minusMinutes(min).getSeconds(); 
    return String.format("%02d:%02d:%02d", hr, min, sec); 
} 
+0

實際上我想把這個hr分秒數據放在一個倒數開始於幫助計時器的標籤裏! 幫我做吧 –

+0

好的。你的意思是,標籤應該先顯示輸入的值,每秒鐘計數1秒? –

+0

是的,請幫助我 –

相關問題