我正在尝试计算公交车时刻表的剩余时间。因此,我将所有表列表存储在 ArrayList 中,并且我只想一次仅计算一个时间表的剩余时间。例如,假设列表有 8:00 和 8:15,当前时间为 7:55。我想要的是用 8:00 而不是 8:15 来计算剩余时间,而且如果当前时间是 8:01,则计算应该在 8:15 而不是 8:00 进行。如果你们帮助我(任何链接或示例方法),那就太好了。
最佳答案
很大程度上取决于您如何存储时间信息,例如,如果您使用诸如 Date
或 LocalTime
之类的内容,则只需对 进行排序即可>时间列表
并使用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:00,您可能错过了公共(public)汽车;))所以您可能会能够使用类似的东西
if (startRange.isBefore(o2) && o2.isBefore(o1)) {
例如,它将匹配 7:46-7:59(含)或根据您的需求进行组合...
关于java - 计算时间表/剩余时间(Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30114158/