我希望有一个JodaTime Interval
代表一年内的一系列日子。例如,1月21日 - 2月23日等,甚至12月7日 - 1月13日。现在,我想知道给定的DateTime
是否属于一年中的范围,无论特别是年。
不幸的是,Interval#contains
似乎没有这种方式。例如,January 7, 2013
可能匹配,但January 7, 1863
则不匹配。我可以使用任何解决方法或其他API吗?
答案 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;
}
}