计算时间表/剩余时间(Java)

时间:2015-05-08 01:03:58

标签: java date time

我正在尝试计算公交车时刻表的剩余时间。所以我在ArrayList中存储了所有表的列表,我想一次只计算一个时间表的剩余时间。例如,假设列表有8:00和8:15,当前时间是7:55。我想要的是用8:00而不是8:15计算剩余时间,如果当前时间是8:01,计算应该在8:15而不是8:00进行。如果你们帮我(任何链接或样本方法),那将是太棒了。

2 个答案:

答案 0 :(得分:1)

很多情况归结为您存储时间信息的方式,例如,如果您使用DateLocalTime之类的内容,则可以简单地对List次和使用Collections.binarySearch找到合适的时间......

List<LocalTime> times = new ArrayList<>(25);
times.add(LocalTime.of(9, 0));
times.add(LocalTime.of(8, 45));
times.add(LocalTime.of(8, 30));
times.add(LocalTime.of(8, 15));
times.add(LocalTime.of(8, 0));
times.add(LocalTime.of(7, 45));
times.add(LocalTime.of(7, 30));
times.add(LocalTime.of(7, 15));
times.add(LocalTime.of(7, 0));

int result = Collections.binarySearch(times, LocalTime.of(7, 55), new Comparator<LocalTime>() {
    @Override
    public int compare(LocalTime o1, LocalTime o2) {

        LocalTime startRange = o1.minusMinutes(15);
        LocalTime endRange = o1;

        if ((o2.equals(o1) || startRange.isBefore(o2)) && (o2.equals(o1) || o2.isBefore(o1))) {
            return 0;
        } 
        return o1.compareTo(o2);
    }
});

if (result >= 0) {
    System.out.println(times.get(result));
}

哪个输出08:00

现在,

if ((o2.equals(o1) || startRange.isBefore(o2)) && (o2.equals(o1) || o2.isBefore(o1))) {

匹配一个确切的时期(例如7:45-8:00),这可能不是你想要的(所以它是8点,你可能错过了公共汽车; ))所以你可以使用像

这样的东西
if (startRange.isBefore(o2) && o2.isBefore(o1)) {
例如,

将匹配7:46-7:59,或根据您的需要组合......

答案 1 :(得分:0)

假设列表已排序,您可以遍历列表并返回差异为正的第一个元素。

伪代码:

for each time in timetable:
    difference = time - current_time
    if difference > 0: return difference