2013-03-15 20 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

相关问题