0

基本上我想看看某人的生日是否在今天日期的 3 个月内。我将使用 Days 来执行此操作,只需说“90”天。
我的想法如下:

  • 我将设置一个新的日期时间作为今天的日期,然后获取相关人员的出生日期。
  • 然后,我想从 DOB 中获取日期和月份,从今天的日期中获取年份。
  • 然后这些日子、月份和年份将合并为一个新的日期。

例如:

出生日期 04/05/1987
今天 10/05/2013
新生儿 04/05/2013

我怎样才能实现从一个日期获取天数/月数,从另一个日期获取年数并将它们放入一个日期的部分?

(只有关键因素,我知道这条规则不会运行)

import org.joda.time.ReadableInstant;
import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.Months;
import org.joda.time.Years;

rule"Blah"
salience 1
when
Proposer($dob : dateOfBirth)
then
DateTime NewBirth = new DateTime()
DateTime today = new DateTime();
#grab DOB day and month
#grab Todays year
#turn "NewBirth" into a combination of the above 2 lines
int $birthday = (Days.daysBetween((ReadableInstant)today,(ReadableInstant)NewBirth).getDays());
If ($birthday <= 90){
logger.info("HURRRAAAYYYYYY");
}
end
4

4 回答 4

2

我会用标准的 JDK 日历来做

boolean isWithin3Month(int y, int m, int d) {
    Calendar now = Calendar.getInstance();
    Calendar birthday = new GregorianCalendar(y, m, d);
    int currentMonth = now.get(Calendar.MONTH);
    int birthDayMonth = birthday.get(Calendar.MONTH);
    int monthDiff;
    if (birthDayMonth < currentMonth) { // eg birth = Jan (0) and curr = Dec (11) 
        monthDiff = 12 - currentMonth +  birthDayMonth;
    } else {
        monthDiff = birthDayMonth - currentMonth;
    }
    if (monthDiff < 0 || monthDiff > 3) {
        return false;
    } else if (monthDiff == 0) {
        return birthday.get(Calendar.DATE) >= now.get(Calendar.DATE);
    }
    return true;
}
于 2013-05-10T12:15:06.633 回答
1
于 2016-10-12T04:07:51.453 回答
0

DateTime newBirth = new DateTime(today.year(), $dob.monthOfYear(), $dob.dayOfMonth(), 00, 00); 在 then 语句的开头尝试 代替无参数构造函数。

于 2013-05-10T12:15:39.893 回答
0

最后设法用Jodatime做到了,

    rule"Less than 3months before Birthday Discount"
when
    Proposer($dob : dateOfBirth)
then
    DateTime today = new DateTime();
    DateTime newBirth = new DateTime(today.year().get()+"-"+$dob.monthOfYear().get()+"-"+$dob.dayOfMonth().get());
    int $birthday = (Days.daysBetween((ReadableInstant)today,(ReadableInstant)newBirth).getDays());
    if($birthday <=90 && $birthday>0){
    logger.info("discount applied");
    }
end
于 2013-05-10T13:35:09.153 回答