java 判断日期连续_Java 获取两个日期之间的所有日期

c634bb9db04a82b42990720b32007efc.png

1.概述

Java 8中引入的新Time API使得可以在不使用外部库的情况下处理日期和时间。

在这个本篇教程中,你将会了解如何在不同版本的Java中获取两个日期之间的所有日期。

2. 使用Java 7

在Java 7中,我们可以使用Calendar实例,使用循环并在每次迭代中使用add方法和Calendar.Date字段添加1天它直到达结束日期。

使用Calendar实例:public static List getDatesBetweenUsingJava7(Date startDate, Date endDate) { List datesInRange = new ArrayList(); Calendar calendar = new GregorianCalendar(); calendar.setTime(startDate); Calendar endCalendar = new GregorianCalendar(); endCalendar.setTime(endDate); while (calendar.before(endCalendar)) { Date result = calendar.getTime(); datesInRange.add(result); calendar.add(Calendar.DATE, 1); } return datesInRange;}

我们来测试一下@Testpublic void test_getDatesBetweenUsingJava7() { Date startDate = Calendar.getInstance().getTime(); Calendar endCalendar = Calendar.getInstance(); // 加了两天 endCalendar.add(Calendar.DATE, 2); Date endDate = endCalendar.getTime(); List dates = DatesBetweenTwoDate.getDatesBetweenUsingJava7(startDate, endDate); assertEquals(dates.size(), 2); Calendar calendar = Calendar.getInstance(); Date date1 = calendar.getTime(); // 我们这里为了简单,就直接使用过期的API了 assertEquals(dates.get(0).getDay(), date1.getDay()); assertEquals(dates.get(0).getMonth(), date1.getMonth()); assertEquals(dates.get(0).getYear(), date1.getYear()); calendar.add(Calendar.DATE, 1); Date date2 = calendar.getTime(); assertEquals(dates.get(1).getDay(), date2.getDay()); assertEquals(dates.get(1).getMonth(), date2.getMonth()); assertEquals(dates.get(1).getYear(), date2.getYear());}

3. 使用Java 8

在Java 8中,可以创建一个连续的无限日期流,我们只是使用我们想要的部分。不幸的是,没有终止无限流的方法。

所以我们需要计算这日期之间的天数,然后简单地使用limit() 方法来限制流:public static List getDatesBetweenUsingJava8(LocalDate startDate, LocalDate endDate) { long numOfDaysBetween = ChronoUnit.DAYS.between(startDate, endDate); return IntStream.iterate(0, i -> i + 1) .limit(numOfDaysBetween) .mapToObj(i -> startDate.plusDays(i)) .collect(Collectors.toList());}

简单的看一下上面的代码,首先,通过与ChronoUnit枚举的DAYS常量,使用between函数来获取两个日期之间的天数。

然后我们创建一个整数流,表示自开始日期以来的天数。

然后,我们使用plusDays() API 将整数转换为LocalDate对象。

最后,我们将所有内容收集到List中。

我们来测试一下@Testpublic void test_getDatesBetweenUsingJava8() { LocalDate startDate = LocalDate.now(); LocalDate endDate = LocalDate.now().plusDays(2); List dates = DatesBetweenTwoDate.getDatesBetweenUsingJava8(startDate, endDate); assertEquals(dates.size(), 2); assertEquals(dates.get(0), LocalDate.now()); assertEquals(dates.get(1), LocalDate.now().plusDays(1));}

4. 使用Java 9

Java 9中带来了专门的计算天数的方法:public static List getDatesBetweenUsingJava9(LocalDate startDate, LocalDate endDate) { return startDate.datesUntil(endDate).collect(Collectors.toList());}

我们可以使用LocalDate类的datesUntil方法来获取两个日期之间的日期。

该datesUntill返回正常顺序的LocalDate的流,我们需要自己进行收集。

5.结论

在这个本篇教程中,我们研究了如何在不同版本的Java中获取两个日期之间的所有日期。

大体有三种:Java 7之前,使用Calendar对象的add方法,进行迭代。

Java 8中,我们可以ChronoUnit.DAYS的between方法,获取相差的天数,然后使用流将日期转为List。

Java 9中,我们可以直接使用datesUntil来计算。

最后,往常一样,代码可以在Github上找到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值