根据输入开始时间年月日格式 结束日期年月日 和按季度 按月 生成连续的区间
时间: 2024-02-06 14:12:20 浏览: 23
以下是一个示例代码,可以根据输入的开始日期年月日、结束日期年月日和按季度/按月生成连续的区间。
```java
import java.time.LocalDate;
import java.time.Month;
import java.time.Period;
import java.time.YearMonth;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
public class DateRangeGenerator {
public enum IntervalType {
QUARTER, // 按季度
MONTH // 按月
}
public static List<YearMonth> generateDateRange(LocalDate startDate, LocalDate endDate, IntervalType intervalType) {
List<YearMonth> dateRange = new ArrayList<>();
if (intervalType == IntervalType.QUARTER) { // 按季度
LocalDate quarterStart = startDate.with(Month.JANUARY).withDayOfMonth(1);
LocalDate quarterEnd = quarterStart.plusMonths(2).withDayOfMonth(quarterStart.plusMonths(2).lengthOfMonth());
while (quarterEnd.isBefore(endDate) || quarterEnd.isEqual(endDate)) {
YearMonth yearMonth = YearMonth.from(quarterStart);
dateRange.add(yearMonth);
quarterStart = quarterStart.plusMonths(3);
quarterEnd = quarterStart.plusMonths(2).withDayOfMonth(quarterStart.plusMonths(2).lengthOfMonth());
}
} else { // 按月
YearMonth yearMonth = YearMonth.from(startDate);
while (yearMonth.isBefore(YearMonth.from(endDate)) || yearMonth.equals(YearMonth.from(endDate))) {
dateRange.add(yearMonth);
yearMonth = yearMonth.plusMonths(1);
}
}
return dateRange;
}
public static void main(String[] args) {
LocalDate startDate = LocalDate.of(2021, Month.JANUARY, 1);
LocalDate endDate = LocalDate.of(2022, Month.JUNE, 30);
// 根据输入的开始时间年月日格式和结束日期年月日,获取LocalDate对象
LocalDate startDateFromInput = LocalDate.of(2021, Month.JULY, 1);
LocalDate endDateFromInput = LocalDate.of(2022, Month.DECEMBER, 31);
// 按季度生成区间
List<YearMonth> quarterDateRange = generateDateRange(startDateFromInput, endDateFromInput, IntervalType.QUARTER);
for (YearMonth yearMonth : quarterDateRange) {
System.out.println(yearMonth);
}
// 按月生成区间
List<YearMonth> monthDateRange = generateDateRange(startDateFromInput, endDateFromInput, IntervalType.MONTH);
for (YearMonth yearMonth : monthDateRange) {
System.out.println(yearMonth);
}
}
}
```
在上面的代码中,我们增加了两个LocalDate类型的变量startDateFromInput和endDateFromInput,分别表示输入的开始日期和结束日期。在main方法中,我们调用generateDateRange方法生成按季度和按月的区间,并打印输出。输出结果与前面的示例代码一致。