我希望获得与特定日期,一周中的一周和一个月相关的年份.我有可能从这种模式中获得多年.假设日期是15,月份是8月,星期几是星期二那么,我怎样才能找到有效的年份?有这个公式吗?
这能完全解决您的问题吗?
这背后的想法:
(直到达到您指定的 MAX_DATE)
List<Integer> validYears = new ArrayList<>();
LocalDate date = LocalDate.of(0, Month.AUGUST, 15);
while (date.getYear() < 2015) {
if (date.getDayOfWeek() == DayOfWeek.TUESDAY) {
validYears.add(date.getYear());
}
date = date.plusYears(1);
}
validYears.forEach(year -> System.out.println(year));
Run Code Online (Sandbox Code Playgroud)
编辑:如果您的日期是 2 月 29 日,您应该添加以下代码(因为如果您在 0000-02-29 上添加 1 年,它将给您 0001-02-28,从那里开始您将停留在 28 号)
if (date.isLeapYear()) { //And date was feb. 29
date = date.withDayOfMonth(29);
}
Run Code Online (Sandbox Code Playgroud)
这是带有流的版本:
int day = 29;
Month month = Month.FEBRUARY;
List<LocalDate> collect = IntStream.range(0, 2016).filter(year -> day <= LocalDate.of(year, month, 1).lengthOfMonth())
.mapToObj(year -> LocalDate.of(year, month, day)).filter(date -> date.getDayOfWeek() == DayOfWeek.TUESDAY)
.collect(Collectors.toList());
collect.forEach((year -> System.out.println(year)));
Run Code Online (Sandbox Code Playgroud)