Java JodaTime:使用特定的时间间隔获取两个日期之间的日期

Java JodaTime:使用特定的时间间隔获取两个日期之间的日期,java,jodatime,Java,Jodatime,使用JodaTime,我目前正在检查开始日期和结束日期之间的天数,如下所示: todayDate = new DateTime(); expiryDate = new DateTime(dbReportModel.getValidityTime()); lastDate = new DateTime(dbReportModel.getLastDate()); Days dayDifference = Days.daysBetween(new LocalDate(todayDate), new

使用JodaTime,我目前正在检查开始日期和结束日期之间的天数,如下所示:

todayDate = new DateTime();
expiryDate = new DateTime(dbReportModel.getValidityTime());
lastDate = new DateTime(dbReportModel.getLastDate());

Days dayDifference = Days.daysBetween(new LocalDate(todayDate), new LocalDate(expiryDate));
如果上述天数差小于或等于某些
int
天数,我将开始通知用户:

if (dayDifference.getDays() <= expiryNotificationProperties.getDaysBefore())
if(dayDifference.getDays()0){
添加(dynamicExpiryDate.minusDays(interval));
dynamicExpiryDate=dynamicExpiryDate.minusDays(间隔);
天数-=间隔;
}
返回DatesWithinterval的列表;
}
这是列表中包含今天日期的附加检查:

List<LocalDate> listOfDatesUsingInterval = getDatesBetweenExpiryDateTodayDate(todayDate, expiryDate, interval);
if (listOfDatesUsingInterval.contains(todayDate.toLocalDate())) {
List listOfDatesUsingInterval=GetDatesBetween ExpireyDateToDayDate(todayDate,ExpireyDate,interval);
if(listOfDatesUsingInterval.contains(todayDate.toLocalDate())){
在JodaTime中是否有可能以更好的方式执行此操作?是否有内置功能来实现此结果?

您可以使用streams

    int numberOfDays = Days.daysBetween(LocalDate.now(), LocalDate.now().plusDays(10)).getDays();
    List<LocalDate> collect = Stream.iterate(LocalDate.now(), e -> e.plusDays(1)).limit(numberOfDays).collect(Collectors.toList());
    collect.forEach(System.out::println);
int numberOfDays=Days.daysBetween(LocalDate.now(),LocalDate.now().plusDays(10)).getDays();
List collect=Stream.iterate(LocalDate.now(),e->e.plusDays(1)).limit(numberOfDays).collect(Collectors.toList());
collect.forEach(System.out::println);

如果您不能使用Java8,请尝试使用谷歌番石榴:

    private static void getDays(DateTime todayDate, DateTime expiryDate, int interval) {
           int numberOfDays = Days.daysBetween(new LocalDate(todayDate), new LocalDate(expiryDate)).getDays();
           Range<Integer> open = Range.closed(1, numberOfDays/interval);
           ImmutableList<Integer> integers = ContiguousSet.create(open, DiscreteDomain.integers()).asList();
           FluentIterable.from(integers).transform(new ConvertToDate(interval)).toList().forEach(System.out::println);
}

private static class ConvertToDate implements Function<Integer, DateTime> {
    private final int interval;

    public ConvertToDate(int interval) {
        this.interval = interval;
    }

    @Override
    public DateTime apply(Integer integer) {
        return DateTime.now().plusDays(integer* interval);
    }
}
private static void getDays(DateTime todayDate、DateTime expiryDate、int interval){
int numberOfDays=Days.daysBetween(新LocalDate(todayDate)、新LocalDate(expiryDate)).getDays();
打开范围=关闭范围(1,天数/间隔);
ImmutableList integers=ContiguousSet.create(open,discreatedDomain.integers()).asList();
FluentIterable.from(integers).transform(new ConvertToDate(interval)).toList().forEach(System.out::println);
}
私有静态类ConvertToDate实现函数{
私有最终整数间隔;
公共转换日期(整数间隔){
这个。间隔=间隔;
}
@凌驾
公共日期时间应用(整数){
return DateTime.now().plusDays(整数*间隔);
}
}

我不知道这是否是更好的解决方案,但我发现它更容易阅读。

为什么不起作用?@lexicore它起作用了。我编辑了这篇文章。有更好的方法实现这样的功能吗?我认为没有更好的方法。API没有提供这样的功能OOTB,你将登陆“startDate+dayIndex”尽管我不能在这个项目中使用Java8,但看起来我正在做这项工作。
    private static void getDays(DateTime todayDate, DateTime expiryDate, int interval) {
           int numberOfDays = Days.daysBetween(new LocalDate(todayDate), new LocalDate(expiryDate)).getDays();
           Range<Integer> open = Range.closed(1, numberOfDays/interval);
           ImmutableList<Integer> integers = ContiguousSet.create(open, DiscreteDomain.integers()).asList();
           FluentIterable.from(integers).transform(new ConvertToDate(interval)).toList().forEach(System.out::println);
}

private static class ConvertToDate implements Function<Integer, DateTime> {
    private final int interval;

    public ConvertToDate(int interval) {
        this.interval = interval;
    }

    @Override
    public DateTime apply(Integer integer) {
        return DateTime.now().plusDays(integer* interval);
    }
}