java 给定3个参数 分别为 1.工作时间段(可以有三个时间段或无数个时间段) 2.时间 3.分钟数 计算分钟后的日期时间 只考虑工作时段
时间: 2023-12-14 18:35:40 浏览: 94
这道题需要分几步来解决:
1. 首先,我们需要将工作时间段解析成一个二维数组,每个元素包含开始时间和结束时间。例如,[["9:00", "12:00"], ["13:00", "18:00"]] 表示工作时间段为上午 9 点到 12 点和下午 1 点到 6 点。
2. 然后,我们需要将给定的时间转换成分钟数。例如,如果给定的时间是 "2021-12-01 14:30",那么对应的分钟数就是 14 * 60 + 30 = 870。
3. 接下来,我们可以从给定的时间开始不断递增分钟数,直到找到一个在工作时间段内的时间。我们可以使用一个 while 循环来实现这个功能。具体来说,我们可以先将时间加上给定的分钟数,然后判断这个时间是否在任何一个工作时间段内,如果是,就返回这个时间。
4. 如果找不到在工作时间段内的时间,我们需要往后推一天,并将时间重置为上班开始的时间,重新开始查找。
下面是一份可能的 Java 代码实现:
```java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class WorkTimeCalculator {
public static void main(String[] args) {
String[][] workTime = {{"9:00", "12:00"}, {"13:00", "18:00"}};
String startTime = "2021-12-01 14:30";
int minutes = 120;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
try {
Date date = sdf.parse(startTime);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int totalMinutes = calendar.get(Calendar.HOUR_OF_DAY) * 60 + calendar.get(Calendar.MINUTE) + minutes;
while (!isInWorkTime(workTime, calendar)) {
calendar.add(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(workTime[0][0].split(":")[0]));
calendar.set(Calendar.MINUTE, Integer.parseInt(workTime[0][0].split(":")[1]));
}
int hour = totalMinutes / 60;
int minute = totalMinutes % 60;
System.out.println(sdf.format(calendar.getTime()));
System.out.println(String.format("%02d:%02d", hour, minute));
} catch (ParseException e) {
e.printStackTrace();
}
}
private static boolean isInWorkTime(String[][] workTime, Calendar calendar) {
for (String[] time : workTime) {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
try {
Date start = sdf.parse(time[0]);
Date end = sdf.parse(time[1]);
Date current = calendar.getTime();
if (current.after(start) && current.before(end)) {
return true;
}
} catch (ParseException e) {
e.printStackTrace();
}
}
return false;
}
}
```
这份代码首先将给定的时间转换成一个 Calendar 对象,然后不断加上给定的分钟数,直到找到一个在工作时间段内的时间。如果找不到,就往后推一天,并将时间重置为上班开始的时间,重新开始查找。最后,我们将找到的时间转换成指定的格式输出。
阅读全文