前端传入起始时间和截止时间,java后端根据1小时为纬度拆分出String类型的起始时间和截止时间,代码有哪些
时间: 2024-10-18 08:15:28 浏览: 22
前端如果通过API将起始时间和截止时间作为字符串传递给Java后端,后端需要处理这些字符串并将其转换成以1小时为单位的时间范围。这里是一个简单的示例代码,我们将使用`SimpleDateFormat`和日期间隔计算:
```java
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
public class TimeSplitter {
public static String[] splitTime(String startTimeStr, String endTimeStr) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 设置时间区格式一致,例如UTC
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date startDate = sdf.parse(startTimeStr);
Date endDate = sdf.parse(endTimeStr);
long totalHours = Math.abs(endDate.getTime() - startDate.getTime()) / (60 * 60 * 1000); // 转换为毫秒
int numIntervals = (int) Math.ceil(totalHours); // 向上取整得到区间数
// 1小时间隔的开始和结束时间列表
List<String> intervalStartEnds = new ArrayList<>();
for (int i = 0; i < numIntervals; i++) {
long intervalStart = startDate.getTime() + (i * 60 * 60 * 1000);
Date intervalStartDate = new Date(intervalStart);
if (intervalStart >= endDate.getTime()) { // 如果超过结束时间,则最后一段不需要截断
break;
}
long intervalEnd = intervalStart + (60 * 60 * 1000); // 结束时间为下个小时的第一秒
Date intervalEndDate = new Date(intervalEnd);
String formattedIntervalStart = sdf.format(intervalStartDate);
String formattedIntervalEnd = sdf.format(intervalEndDate);
intervalStartEnds.add(formattedIntervalStart);
intervalStartEnds.add(formattedIntervalEnd);
}
// 返回分割后的字符串数组
return intervalStartEnds.toArray(new String[0]);
}
}
```
阅读全文