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