根据输入的开始日期 结束日期 和按季度 按月 生成连续的区间
时间: 2024-02-06 20:12:19 浏览: 84
以下是一个示例代码,可以根据输入的开始日期、结束日期和按季度/按月生成连续的区间。代码中使用了Java 8的时间类库,需要注意Java版本的兼容性。
```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);
// 按季度生成区间
List<YearMonth> quarterDateRange = generateDateRange(startDate, endDate, IntervalType.QUARTER);
for (YearMonth yearMonth : quarterDateRange) {
System.out.println(yearMonth);
}
// 按月生成区间
List<YearMonth> monthDateRange = generateDateRange(startDate, endDate, IntervalType.MONTH);
for (YearMonth yearMonth : monthDateRange) {
System.out.println(yearMonth);
}
}
}
```
在上面的代码中,我们使用了Java 8的时间类库,LocalDate表示日期,YearMonth表示年月。generateDateRange方法根据输入的开始日期、结束日期和按季度/按月生成连续的区间,返回一个List对象。
在按季度生成区间的情况下,我们首先找到开始日期所在季度的开始日期,然后每次加3个月得到一个季度的结束日期,如果该季度的结束日期在结束日期之前或与结束日期相等,则将其添加到List中。在按月生成区间的情况下,我们从开始日期开始,每次加1个月,直到该月份大于等于结束日期的月份,将每个月份添加到List中。
在main方法中,我们设置开始日期和结束日期,然后分别调用generateDateRange方法生成按季度和按月的区间,并打印输出。输出结果如下:
```
2021-01
2021-04
2021-07
2021-10
2022-01
2022-04
2022-01
2022-02
2022-03
2022-04
2022-05
2022-06
```
阅读全文