实现 Java 按30分钟拆分时间的流程如下:

  1. 获取输入的时间段。
  2. 将输入的时间段转换为起始时间和结束时间。
  3. 计算起始时间与结束时间之间的分钟数。
  4. 判断分钟数是否大于等于30。
  5. 如果分钟数大于等于30,则进行拆分,生成多个30分钟的时间段。
  6. 如果分钟数小于30,则生成一个完整的时间段。
  7. 输出拆分后的时间段。

下面是每一步需要做的事情以及相应的代码:

步骤1:获取输入的时间段。

可以使用 Scanner 类从控制台获取用户输入的时间段。

import java.util.Scanner;

public class TimeSplitter {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入时间段(格式:HH:mm-HH:mm):");
        String timeRange = scanner.nextLine();
        // 获取用户输入的时间段
    }
}

步骤2:将输入的时间段转换为起始时间和结束时间。

可以使用 String 的 split 方法将时间段按照 "-" 分隔成起始时间和结束时间。

String[] times = timeRange.split("-");
String startTime = times[0]; // 起始时间
String endTime = times[1]; // 结束时间

步骤3:计算起始时间与结束时间之间的分钟数。

可以通过将时间字符串转换为 LocalTime 类型,然后使用 Duration 类计算时间差,最后将时间差转换成分钟数。

import java.time.Duration;
import java.time.LocalTime;

LocalTime start = LocalTime.parse(startTime);
LocalTime end = LocalTime.parse(endTime);

Duration duration = Duration.between(start, end);
long minutes = duration.toMinutes();

步骤4:判断分钟数是否大于等于30。

使用条件判断语句判断分钟数是否大于等于30。

if (minutes >= 30) {
    // 执行拆分操作
} else {
    // 输出完整的时间段
}

步骤5:进行拆分生成多个30分钟的时间段。

通过循环生成多个30分钟的时间段,起始时间为输入的起始时间,结束时间每次增加30分钟。

LocalTime current = start;
while (current.isBefore(end)) {
    LocalTime next = current.plusMinutes(30);
    // 输出当前时间段,起始时间为 current,结束时间为 next
    current = next;
}

步骤6:生成一个完整的时间段。

如果分钟数小于30,则直接输出完整的时间段。

// 输出完整的时间段,起始时间为 start,结束时间为 end

步骤7:输出拆分后的时间段。

将每个时间段输出到控制台。

System.out.println("拆分后的时间段:");

根据以上的流程,我们可以将代码整合起来,并添加一些异常处理的代码。

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

public class TimeSplitter {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入时间段(格式:HH:mm-HH:mm):");
        String timeRange = scanner.nextLine();

        String[] times = timeRange.split("-");
        String startTime = times[0];
        String endTime = times[1];

        try {
            LocalTime start = LocalTime.parse(startTime);
            LocalTime end = LocalTime.parse(endTime);

            Duration duration = Duration.between(start, end);
            long minutes = duration.toMinutes();

            System.out.println("拆分后的时间段:");

            if (minutes >= 30) {
                LocalTime current = start;
                while (current.isBefore(end)) {
                    LocalTime next = current.plusMinutes(30);
                    System.out.println(current.toString() + "-" + next.toString());
                    current = next;
                }
            } else {
                System.out.println(startTime + "-" + endTime);
            }
        } catch (Exception e) {
            System.out.println("时间段格式错误!");
        }
    }
}

接下来,我们使用序列图展示代码的执行过程:

sequenceDiagram
    participant User
    participant Developer
    User->>Developer: 输入时间段
    Developer->>Developer: 将输入的时间段转换为起始时间和结束时间
    Developer->>Developer: 计算起始时间与结束时间之间的分钟数
    Developer->>Developer: 判断分钟数是否大于等于30
    alt 分钟数