gpt4 book ai didi

java - 计算事件的下一个日期

转载 作者:行者123 更新时间:2023-12-01 19:41:11 24 4
gpt4 key购买 nike

我正在尝试构建一个具有重复事件的应用程序。在我的数据库中,我有一个表 recurring_pattern:

type_name  sepereation_count  day_of_week  week_of_month  day_of_month  month_of_year
daily 0 NULL NULL NULL NULL
weekly 0 2 NULL NULL NULL
monthly 0 1 3 NULL NULL
monthly2 1 NULL NULL 10 NULL
yearly 0 NULL NULL 20 5

seperation_count:如果需要每隔一周/每月等配置一次事件,则 seperation_count 将为 1
day_of_week: 1 = 星期一; 2 = 星期二等

我有一个表 recurring_events:

id  start_date  last_occurence  recurring_pattern_name
1 2019-10-01 2019-12-03 daily
2 2019-10-01 2019-12-03 weekly
3 2019-10-01 2019-11-18 monthly
4 2019-11-01 NULL monthly2
5 2019-01-01 2019-05-20 yearly

接下来的 Activity 日期应该是:
1 = 2019-12-04 因为每一天
2 = 2019-12-10 因为每周星期二(一周从星期一开始)
3 = 2019-12-16 因为每 3 周的星期一
4 = 2019-12-10 因为每两个月的 10 号。
5 = 2020-05-20 因为每年 5 月 20 日

现在我正在尝试在 Java 中查找下一个日期,但我不知道如何做到这一点。
对于我的日常 Activity

nextDate = lastPaid == null ? startDate : lastPaid;
nextDate = nextDate.plusDays(1 + recurringPattern.getSepereationCount());

但是我如何获得每周、每月、每月和每年 Activity 的下一个日期?

I used this as a template

最佳答案

对于每周计划

    int separationCount = 0;
LocalDate start = LocalDate.parse("2019-10-01");
int dowNumber = 2;

DayOfWeek dow = DayOfWeek.of(dowNumber);

LocalDate first = start.with(TemporalAdjusters.nextOrSame(dow));
System.out.println("first: " + first);
LocalDate next = first.plusWeeks(1 + separationCount);
System.out.println("next: " + next);

此演示片段的输出是:

first: 2019-10-01
next: 2019-10-08

每月计划

    LocalDate start = LocalDate.parse("2019-10-01");
int dowNumber = 1;
int weekOfMonth = 3;

DayOfWeek dow = DayOfWeek.of(dowNumber);

LocalDate first = start.with(WeekFields.ISO.weekOfMonth(), weekOfMonth)
.with(dow);
if (first.isBefore(start)) {
// Use next month instead
first = start.plusMonths(1)
.with(WeekFields.ISO.weekOfMonth(), weekOfMonth)
.with(dow);
}

System.out.println("first: " + first);
first: 2019-10-14

您可以以类似的方式计算以下日期。

每月2计划

这个是非常微不足道的。使用 LocalDate.withDayOfMonth()LocalDate.plusMonths()。请记住以与上述相同的方式检查您计算的第一个日期是否早于开始日期。请记住,29、30 或 31 日并不适用于每个月。

年度计划

我把这个留给你了。在 LocalDate 的文档中查找您需要的内容。

文档链接

关于java - 计算事件的下一个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59172916/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com