JAVA 1.传入设备工作时段字符串,格式为String(HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm), 2.传入设备工作开始日期时间(Date类型yyyy-MM-dd hh:mm:ss) 3.传入设备工作结束日期时间(Date类型yyyy-MM-dd hh:mm:ss) 4.传入一个指定年月日(Date类型yyyy-MM-dd),该日期已知在工作开始和结束日期之间 5.计算第四步这一天这台设备工作了多少分钟 单位(分钟)
时间: 2024-02-05 21:10:52 浏览: 68
swift-一个超级简单的计时器在macOS菜单条上显示hh:mm格式的时间
可以按照以下步骤实现:
1. 将设备工作时段字符串按照分号分隔成多个时间段,存储到一个数组中。
2. 将传入的设备工作开始日期时间和结束日期时间转换成毫秒数。
3. 将指定年月日转换成毫秒数。
4. 遍历每个时间段,将开始时间和结束时间转换成毫秒数。
5. 判断指定年月日是否在工作开始和结束日期之间,如果不是,则返回0。
6. 对于指定年月日在工作开始和结束日期之间的情况,计算该日在每个时间段内的工作时间,并累加到总工作时间中。
7. 返回总工作时间,单位为分钟。
下面是一个示例代码:
```java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DeviceWorkTimeCalculator {
public static int calculateWorkMinutes(String workTimeStr, Date workStartTime, Date workEndTime, Date targetDate) {
String[] workPeriods = workTimeStr.split(";");
long workStartMillis = workStartTime.getTime();
long workEndMillis = workEndTime.getTime();
long targetMillis = targetDate.getTime();
int totalWorkMinutes = 0;
for (String periodStr : workPeriods) {
String[] times = periodStr.split("-");
String startTimeStr = times[0];
String endTimeStr = times[1];
try {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
Date startTime = sdf.parse(startTimeStr);
Date endTime = sdf.parse(endTimeStr);
long startMillis = getTimeMillis(targetDate, startTime);
long endMillis = getTimeMillis(targetDate, endTime);
if (startMillis < workStartMillis) {
startMillis = workStartMillis;
}
if (endMillis > workEndMillis) {
endMillis = workEndMillis;
}
if (startMillis < endMillis) {
totalWorkMinutes += (endMillis - startMillis) / (1000 * 60);
}
} catch (ParseException e) {
e.printStackTrace();
}
}
return totalWorkMinutes;
}
private static long getTimeMillis(Date date, Date time) {
long dateMillis = date.getTime() / (24 * 60 * 60 * 1000) * (24 * 60 * 60 * 1000);
long timeMillis = time.getTime() - (time.getTime() / (24 * 60 * 60 * 1000) * (24 * 60 * 60 * 1000));
return dateMillis + timeMillis;
}
public static void main(String[] args) throws ParseException {
String workTimeStr = "09:00-12:00;13:00-18:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date workStartTime = sdf.parse("2021-07-01 09:00:00");
Date workEndTime = sdf.parse("2021-07-01 18:00:00");
Date targetDate = sdf.parse("2021-07-01");
int minutes = calculateWorkMinutes(workTimeStr, workStartTime, workEndTime, targetDate);
System.out.println(minutes);
}
}
```
在上面的示例代码中,我们将传入的时间字符串按照分号分隔成多个时间段,然后将开始时间和结束时间转换成毫秒数,判断指定年月日是否在工作开始和结束日期之间,如果是,则遍历每个时间段,并计算该日在每个时间段内的工作时间,最后累加到总工作时间中。最终返回总工作时间,单位为分钟。
阅读全文