如何从给定日期,星期几和月份获得所有可能的年份?

moh*_*sin 7 math date formula

我希望获得与特定日期,一周中的一周和一个月相关的年份.我有可能从这种模式中获得多年.假设日期是15,月份是8月,星期几是星期二那么,我怎样才能找到有效的年份?有这个公式吗?

gri*_*Flo 4

这能完全解决您的问题吗?

这背后的想法:

  • 从第 0 年的特定日期(8 月 15 日)开始
  • 如果日期是在指定的工作日 --> 将其添加到您的列表中
  • 添加 1 年
  • 回到方格1

(直到达到您指定的 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)