使用(不是那么新的)Java 8 time api,这种计算更容易
public static void main(String[] args) {
String time1Str = "04:00";
String time2Str = "09:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm");
LocalTime time1 = LocalTime.parse(time1Str, formatter);
LocalTime time2 = LocalTime.parse(time2Str, formatter);
Duration duration = Duration.between(time1, time2); // 9-4
Duration halfDuration = duration.dividedBy(2); // divided by 2
LocalTime result = LocalTime.from(halfDuration.addTo(time1)); // added to start time
System.out.println(result.format(formatter));
}
编辑:在这种情况下支持跨越日期边界的范围
,我们需要将日期值添加到时间。这将告诉 Java 22:00 到 01:00 的范围是“明天”:
public static void main(String[] args) {
String time1Str = "22:00";
String time2Str = "01:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm");
LocalTime time1 = LocalTime.parse(time1Str, formatter);
LocalTime time2 = LocalTime.parse(time2Str, formatter);
// add date value: start with today
LocalDate today = LocalDate.now();
// combine date time for lower value: will be assigned to today
LocalDateTime dateTime1 = LocalDateTime.of(today, time1);
// combine date time for upper value: will be assigned same day if it is after lower value
// otherwise (we crossed date boundary) assign it to tomorrow
LocalDateTime dateTime2 = time2.isAfter(time1) ?
LocalDateTime.of(today, time2) : LocalDateTime.of(today.plusDays(1), time2);
Duration duration = Duration.between(dateTime1, dateTime2);
Duration halfDuration = duration.dividedBy(2);
LocalTime result = LocalTime.from(halfDuration.addTo(time1));
System.out.println(result.format(formatter));
}