我有一个开始和结束的时间范围,它们都是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