2013-03-15 21 views
2

我有一個開始和結束的時間範圍,它們都是java.sql.Time對象。我想用它們之間的時間列表填充JComboBox,間隔15分鐘。例如,如果開始時間是11:00而結束時間是12:00,我希望JComboBox中的選項爲11:00,11:15,11:30,11:45和12:00。獲取兩次之間的時間列表

什麼是最有效的方法呢?

+0

我不知道它是否是最有效的方法,但我會做一個JComboBox數組,在每個元素中,我會有一個「時間」。你怎麼看? – DanielTheRocketMan 2013-03-15 03:31:41

回答

3

java.sql.Timejava.util.Date延伸,因此,你可以使用它在接受Date的其他類別中。

在這裏,我用了一個Calendar只需15個分鐘的時間間隔修改miniute場,直到我達到所需的結束時間...

List<java.sql.Time> intervals = new ArrayList<>(25); 
// These constructors are deprecated and are used only for example 
java.sql.Time startTime = new java.sql.Time(11, 0, 0); 
java.sql.Time endTime = new java.sql.Time(12, 0, 0); 

intervals.add(startTime); 

Calendar cal = Calendar.getInstance(); 
cal.setTime(startTime); 
while (cal.getTime().before(endTime)) { 
    cal.add(Calendar.MINUTE, 15); 
    intervals.add(new java.sql.Time(cal.getTimeInMillis())); 
} 

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); 
for (java.sql.Time time : intervals) { 
    System.out.println(sdf.format(time)); 
} 

這將輸出

11:00 
11:15 
11:30 
11:45 
12:00 
0

扭曲對你的問題有點:使含5間隔內的所有整數的列表,2個整數之間:

首先,我們可以知道有多少數量會出現,並相應地分配名單: (所有的僞代碼)

// assume begin and end is at the boundary of interval. 
int noOfElement = (begin - end)/5 + 1; 
List<Integer> resultList = new ArrayList<>(noOfElement); 

然後填充值列表:然後

for (int i = begin; i <= end ; i += 5) { 
    resultList.add(i); 
} 

resultList將包含所有的值,你想。

如果你能理解這個例子中,是處理日期

一些更多的提示,你沒有什麼特別製作類似的邏輯:考慮Date#toTime(),並且Date(long Date)

+1

也看看喬達時間的週期和持續時間。這使得添加15分鐘時間戳變得微不足道。 – 2013-03-15 03:25:11

+0

@MichaelDeardeuff我寧願長一些,然後加上(15 * 60 * 1000)以獲得下一次。在這種情況下,它看起來微不足道,並且可讀性強:) – 2013-03-15 03:45:46

相關問題