Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一种计算夜间到早晨持续时间的算法_Java_Algorithm_Time_Java Time_Duration - Fatal编程技术网

Java 一种计算夜间到早晨持续时间的算法

Java 一种计算夜间到早晨持续时间的算法,java,algorithm,time,java-time,duration,Java,Algorithm,Time,Java Time,Duration,我陷入了大学作业中给出的持续时间计算问题。因此,用户可以输入开始时间和结束时间,其中小时和分钟分别输入到程序中。小时以24小时格式输入(00-23)。我的程序通过一个简单的“结束时间-开始时间”成功地计算了“结束时间”大于“开始时间”的持续时间。例:23.55-22.55=1小时。但我的问题出现在这样的情况下,“开始时间=23.45”和“结束时间=00.45”。因此,早期的方法对此不起作用 所以我需要一点帮助,因为我还在学习Java的基础知识,这是一项大学作业,除了课程之外我什么都做不了(复杂的

我陷入了大学作业中给出的持续时间计算问题。因此,用户可以输入开始时间和结束时间,其中小时和分钟分别输入到程序中。小时以24小时格式输入(00-23)。我的程序通过一个简单的“结束时间-开始时间”成功地计算了“结束时间”大于“开始时间”的持续时间。例:23.55-22.55=1小时。但我的问题出现在这样的情况下,“开始时间=23.45”和“结束时间=00.45”。因此,早期的方法对此不起作用

所以我需要一点帮助,因为我还在学习Java的基础知识,这是一项大学作业,除了课程之外我什么都做不了(复杂的事情)。因此,我更愿意停留在基础(博德马斯)和做它。请询问是否需要更多信息

提前谢谢

这是有效的:

if (start_time > end_time) end_time += 24 hours
duration = end_time - start_time
或者更简洁地说

duration = end_time + (end_time < startTime ? 24 : 0) - start_time
duration=end\u time+(end\u time
区分
end\u time==start\u time
所需的更改意味着0小时还是24小时作为练习。

java.time 我建议您使用
java.time
API来完成这项工作。这些步骤可概括为以下几点:

  • 使用开始时间和结束时间的当前日期创建
    LocalDateTime
    的实例
  • 如果结束时间的
    LocalDateTime
    实例早于开始时间的实例,请将结束时间的实例重置为午夜,然后添加一天,最后将时间应用于该实例
  • 使用
    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
    
    运行示例:

    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-8为模型并作为的一部分引入的。Java-9引入了一些更方便的方法

    了解有关java.timeAPI的更多信息

    • 无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用哪个backport将大部分Java.time功能移植到Java6&7
    • 如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并确认

    到目前为止你都做了些什么?在问题中添加现有代码。查看家庭作业的StackOverflow策略。你真的需要表现出一些努力和一些现有的代码,特别是如果你要求家庭作业帮助的话。天哪,这太简单了,为什么我没有想到这一点!我已经尝试了10行算法仍然不起作用,而这仅仅是1行!哈哈,谢谢你!