计算夜间持续时间的算法

时间:2016-05-14 21:38:17

标签: java algorithm time duration

我陷入了我的学院作业中给出的持续时间计算问题。因此,用户可以输入开始时间和结束时间,其中小时和分钟分别输入到程序中。小时以24小时格式输入(00 - 23)。我的程序成功计算了“结束时间”大于“开始时间”的持续时间,只有一个简单的“结束时间 - 开始时间”。例如:23.55 - 22.55 = 1h。但是当出现类似这样的事情时,我的问题出现了,'开始时间= 23.45'和'结束时间= 00.45'。所以早期的方法不适用于此。

所以我需要一些帮助,因为我还在学习 Java 的基础知识,这是一项大学任务,我不能在课程之外做任何事情(复杂的东西)。所以我宁愿留在基础(BODMAS)并做到这一点。请询问是否需要更多信息!

提前致谢!

2 个答案:

答案 0 :(得分:0)

这有效:

if (start_time > end_time) end_time += 24 hours
duration = end_time - start_time

或者更简洁

duration = end_time + (end_time < startTime ? 24 : 0) - start_time

区分end_time == start_time表示零或24小时所需的更改是作为练习留下的。

答案 1 :(得分:0)

java.time

我建议您使用 java.time API 来执行此操作。这些步骤可以概括为以下几点:

  1. 使用开始时间和结束时间的当前日期创建 LocalDateTime 的实例。
  2. 如果结束时间的 LocalDateTime 实例早于开始时间的实例,则将结束时间的实例重置为午夜,然后为其添加一天,最后对其应用时间。
  3. 使用 java.time.Duration 获取 LocalDateTime 实例之间的持续时间。

演示:

import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter the start hour: ");
        int startHour = scanner.nextInt();
        System.out.print("Enter the start minute: ");
        int startMinute = scanner.nextInt();
        System.out.print("Enter the start hour: ");
        int endHour = scanner.nextInt();
        System.out.print("Enter the start minute: ");
        int endMinute = scanner.nextInt();

        LocalDate date = LocalDate.now();

        LocalDateTime startDateTime = date.atTime(LocalTime.of(startHour, startMinute));
        LocalDateTime endDateTime = date.atTime(LocalTime.of(endHour, endMinute));

        if (startDateTime.isAfter(endDateTime)) {
            endDateTime = endDateTime.with(LocalTime.MIN).plusDays(1).with(LocalTime.of(endHour, endMinute));
        }

        Duration duration = Duration.between(startDateTime, endDateTime);

        System.out.println(duration);

        // Custom format
        // ####################################Java-8####################################
        System.out.println(
                "Total duration: " + String.format("%02d:%02d", duration.toHours(), duration.toMinutes() % 60));
        // ##############################################################################

        // ####################################Java-9####################################
        System.out.println(
                "Total duration: " + String.format("%02d:%02d", duration.toHoursPart(), duration.toMinutesPart()));
        // ##############################################################################
    }
}

示例运行:

Enter the start hour: 23
Enter the start minute: 45
Enter the start hour: 0
Enter the start minute: 45
PT1H
Total duration: 01:00
Total duration: 01:00

java.time.DurationISO-8601 standards 为模型,并作为 JSR-310 implementation 的一部分与 Java-8 一起引入。 Java-9 引入了一些更方便的方法。

Trail: Date Time 了解有关 java.time API 的更多信息。

相关问题