需求描述:
时间范围:2022-04-10 09:00:00 ~ 2022-04-12 18:00:00
具体描述:需要将上边的一个时间范围拆分成若干个时间范围(单位:天)。
实现效果:
(day=2022-04-10, startTime=2022-04-10 09:00:00, endTime=2022-04-10 23:59:59)
(day=2022-04-11, startTime=2022-04-11 00:00:00, endTime=2022-04-11 23:59:59)
(day=2022-04-12, startTime=2022-04-12 00:00:00, endTime=2022-04-12 18:00:00)
项目依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.6</version>
<relativePath/>
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
代码实现:
@SpringBootTest
public class DemoApplicationTests {
public static final DateTimeFormatter YYYY_MM_DD = DateTimeFormatter.ofPattern("yyyy-MM-dd");
public static final DateTimeFormatter YYYY_MM_DD_HH_MM_SS = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
public static final String HEAD_DATE_TIME_SUFFIX = " 00:00:00";
public static final String LAST_DATE_TIME_SUFFIX = " 23:59:59";
@Builder
@Data
static class dayInfo {
private String day;
private String startTime;
private String endTime;
}
@Test
public void testGetDayInfoList() {
String startTime = "2022-04-10 09:00:00";
String endTime = "2022-04-12 18:00:00";
List<dayInfo> dayInfoList = getDayInfoList(startTime, endTime);
for (dayInfo dayInfo : dayInfoList) {
System.out.println(dayInfo);
}
}
public List<dayInfo> getDayInfoList(String startTime, String endTime) {
String sd = startTime.substring(0, 10);
String ed = endTime.substring(0, 10);
List<dayInfo> dayInfoList = new ArrayList<>();
List<String> dayList = getDayList(sd, ed);
for (String day : dayList) {
dayInfoList.add(dayInfo.builder()
.day(day)
.startTime(day.concat(HEAD_DATE_TIME_SUFFIX))
.endTime(day.concat(LAST_DATE_TIME_SUFFIX))
.build());
}
if (dayInfoList == null || dayInfoList.isEmpty()) {
return dayInfoList;
}
dayInfo head = dayInfoList.get(0);
String headDay = head.getDay();
String headStartTimeStandard = headDay.concat(HEAD_DATE_TIME_SUFFIX);
LocalDateTime parse1 = LocalDateTime.parse(startTime, YYYY_MM_DD_HH_MM_SS);
LocalDateTime parse2 = LocalDateTime.parse(headStartTimeStandard, YYYY_MM_DD_HH_MM_SS);
if (parse1.isAfter(parse2)) {
head.setStartTime(startTime);
dayInfoList.set(0, head);
}
dayInfo last = dayInfoList.get(dayInfoList.size() - 1);
String lastDay = last.getDay();
String headEndTimeStandard = lastDay.concat(LAST_DATE_TIME_SUFFIX);
LocalDateTime parse3 = LocalDateTime.parse(endTime, YYYY_MM_DD_HH_MM_SS);
LocalDateTime parse4 = LocalDateTime.parse(headEndTimeStandard, YYYY_MM_DD_HH_MM_SS);
if (parse3.isBefore(parse4)) {
last.setEndTime(endTime);
dayInfoList.set(dayInfoList.size() - 1, last);
}
return dayInfoList;
}
public List<String> getDayList(String startDate, String endDate) {
List<String> days = new ArrayList<>();
LocalDate sd = LocalDate.parse(startDate, YYYY_MM_DD);
LocalDate ed = LocalDate.parse(endDate, YYYY_MM_DD);
if (sd.isBefore(ed) || sd.isEqual(ed)) {
days.add(startDate);
while (ed.isAfter(sd)) {
sd = sd.plusDays(1);
days.add(sd.format(YYYY_MM_DD));
}
}
return days;
}
}
运行效果:
DemoApplicationTests.dayInfo(day=2022-04-10, startTime=2022-04-10 09:00:00, endTime=2022-04-10 23:59:59)
DemoApplicationTests.dayInfo(day=2022-04-11, startTime=2022-04-11 00:00:00, endTime=2022-04-11 23:59:59)
DemoApplicationTests.dayInfo(day=2022-04-12, startTime=2022-04-12 00:00:00, endTime=2022-04-12 18:00:00)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)