我有一個開始和結束的時間範圍,它們都是java.sql.Time
對象。我想用它們之間的時間列表填充JComboBox,間隔15分鐘。例如,如果開始時間是11:00而結束時間是12:00,我希望JComboBox中的選項爲11:00,11:15,11:30,11:45和12:00。獲取兩次之間的時間列表
什麼是最有效的方法呢?
我有一個開始和結束的時間範圍,它們都是java.sql.Time
對象。我想用它們之間的時間列表填充JComboBox,間隔15分鐘。例如,如果開始時間是11:00而結束時間是12:00,我希望JComboBox中的選項爲11:00,11:15,11:30,11:45和12:00。獲取兩次之間的時間列表
什麼是最有效的方法呢?
java.sql.Time
從java.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
扭曲對你的問題有點:使含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)
也看看喬達時間的週期和持續時間。這使得添加15分鐘時間戳變得微不足道。 – 2013-03-15 03:25:11
@MichaelDeardeuff我寧願長一些,然後加上(15 * 60 * 1000)以獲得下一次。在這種情況下,它看起來微不足道,並且可讀性強:) – 2013-03-15 03:45:46
我不知道它是否是最有效的方法,但我會做一個JComboBox數組,在每個元素中,我會有一個「時間」。你怎麼看? – DanielTheRocketMan 2013-03-15 03:31:41