2 changed files with 147 additions and 25 deletions
@ -0,0 +1,85 @@ |
|||
package com.kms.yxgh.util; |
|||
|
|||
import java.time.LocalDateTime; |
|||
import java.time.ZoneId; |
|||
import java.time.ZonedDateTime; |
|||
import java.time.format.DateTimeFormatter; |
|||
import java.util.ArrayList; |
|||
import java.util.Date; |
|||
import java.util.List; |
|||
import java.util.stream.Collectors; |
|||
|
|||
public class TimeSplitter { |
|||
|
|||
public static List<String> splitByHour(String startTimeStr, String endTimeStr) { |
|||
endTimeStr = endTimeStr.replaceAll("59", "00"); |
|||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); |
|||
LocalDateTime startTime = LocalDateTime.parse(startTimeStr, formatter); |
|||
LocalDateTime endTime = LocalDateTime.parse(endTimeStr, formatter); |
|||
|
|||
List<String> result = new ArrayList<>(); |
|||
|
|||
// 处理开始时间不是整点的情况
|
|||
if (startTime.getMinute() != 0 || startTime.getSecond() != 0) { |
|||
// 将开始时间设置为下一个整点
|
|||
LocalDateTime nextHour = startTime |
|||
.plusHours(1) |
|||
.withMinute(0) |
|||
.withSecond(0); |
|||
|
|||
// 如果下一个整点已经超过结束时间,则只添加开始和结束时间
|
|||
if (nextHour.isAfter(endTime)) { |
|||
result.add(startTimeStr); |
|||
result.add(endTimeStr); |
|||
return result; |
|||
} |
|||
|
|||
// 添加开始时间和第一个整点时间
|
|||
result.add(startTimeStr); |
|||
result.add(nextHour.format(formatter)); |
|||
startTime = nextHour; |
|||
} |
|||
|
|||
// 添加中间的整点时间
|
|||
LocalDateTime currentHour = startTime; |
|||
while (currentHour.plusHours(1).isBefore(endTime) || currentHour.plusHours(1).isEqual(endTime)) { |
|||
result.add(currentHour.format(formatter)); |
|||
currentHour = currentHour.plusHours(1); |
|||
} |
|||
|
|||
// 处理结束时间
|
|||
if (currentHour.isBefore(endTime)) { |
|||
result.add(currentHour.format(formatter)); |
|||
result.add(endTimeStr); |
|||
} else { |
|||
result.add(endTimeStr); |
|||
} |
|||
return result.stream().sorted().collect(Collectors.toList()); |
|||
} |
|||
|
|||
public static String getDateStr(Date date) { |
|||
LocalDateTime ldt = date.toInstant() |
|||
.atZone(ZoneId.systemDefault()) |
|||
.toLocalDateTime(); |
|||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); |
|||
return ldt.format(formatter); |
|||
} |
|||
|
|||
public static String parseDateToPoint(Date date) { |
|||
// 转换为整点时间
|
|||
ZonedDateTime zdt = date.toInstant() |
|||
.atZone(ZoneId.systemDefault()) |
|||
.withMinute(0) |
|||
.withSecond(0) |
|||
.withNano(0); |
|||
// 格式化为字符串
|
|||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); |
|||
return zdt.format(formatter); |
|||
} |
|||
|
|||
public static void main(String[] args) { |
|||
} |
|||
|
|||
|
|||
} |
|||
|
Loading…
Reference in new issue