JodaTime Interval无论年份如何?

时间:2014-10-15 16:19:01

标签: java jodatime intervals

我希望有一个JodaTime Interval代表一年内的一系列日子。例如,1月21日 - 2月23日等,甚至12月7日 - 1月13日。现在,我想知道给定的DateTime是否属于一年中的范围,无论特别是年。

不幸的是,Interval#contains似乎没有这种方式。例如,January 7, 2013可能匹配,但January 7, 1863则不匹配。我可以使用任何解决方法或其他API吗?

1 个答案:

答案 0 :(得分:4)

我不相信Joda Time中有任何类型 - 而Interval处理瞬间,听起来你对日/月价值感兴趣。

您应该构建自己的类型,该类型由两个MonthDay字段组成。

然后确定特定值是否在该范围内,为该值加MonthDay,并将这三个值相互比较。

例如:

// Note: this assumes you always want end to be exclusive, and start to be inclusive.
// You may well want to make end inclusive instead; it depends on your use case.
public final class MonthDayInterval {
    private final MonthDay start;
    private final MonthDay end;

    public MonthDayInterval(MonthDay start, MonthDay end) {
        this.start = start;
        this.end = end;
    }

    public boolean contains(DateTime dateTime) {
        MonthDay monthDay = 
        return contains(new MonthDay(
            dateTime.getMonthOfYear(), dateTime.getDayOfMonth());
    }

    public boolean contains(MonthDay monthDay) {
        boolean natural = start.compareTo(monthDay) <= 0 && monthDay.compareTo(end) < 0;
        // We need to invert the result if end is after or equal to start.
        return start.compareTo(end) < 0 ? natural : !natural;
    }
}