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

标签 java date time

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

最佳答案

很大程度上取决于您如何存储时间信息,例如,如果您使用诸如 DateLocalTime 之类的内容,则只需对 进行排序即可>时间列表并使用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/

相关文章:

java - 从类文件中读取一行代码

java - hibernate criteria.setFetchMode ("") 不工作

ios - 夏令时月末日期问题

ruby - 为什么 Ruby 认为公元 100 年有 366 天?

java - 将军事时间更改为标准时间的程序

java - 控制台输出 Selenium Webdriver

java - Google App Engine 数据存储远程集成

php - 用户事件表中一天的 MYSQL 'SELECT' 和 COUNT "active"用户

java - 将 LocalDateTime 与 JAXB 结合使用

php - 在 mysql/php 中每小时批量显示 100 个海量数据