如何获取两个日期之间的所有日期?

  • 时间:2021-06-11 08:08 编辑:知速网 来源:知速网 阅读:188
  • 扫一扫,手机访问
摘要:如何获取两个日期之间的所有日期?

简介

Java 8 加入的新 Time Api可以方便的处理日期,我们不再需要引入额外的库。

本文对比一下不同版本的 Java 如何获取两个日期之间所有的日期。

Java 7

在 Java 7中,我们一般使用一个循环,使用add 方法 对 Calendar实例使用 add(Calendar.Date,1) ,直到满足条件为之。代码示例如下:

public static List<Date> getDatesBetweenUsingJava7(
  Date startDate, Date endDate) {
    List<Date> 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;
}

Java 8

在 Java 8 中,我们可以创建一个无限的 Stream,然后取需要的部分。但是需要在满足条件时结束这个无限Stream, Java 8 语言层面没有提供直接的方法(Java 9 开始有了 takeWhile 和 dropWhile),所以我们需要提前计算日期的个数,然后使用limit()来终止Stream。

public static List<LocalDate> 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()); 
}

首先我们用 between 方法获取了日期之间按天(ChronoUnit.DAYS)的差异。然后我们创建一个 int Stream,表示从开始时间之后的天数。再然后我们使用 plusDays() 把int转换成 LocalDate。最后,使用 collect 来收集。

Java 9

Java 9 直接为这个功能引入了新方法:

public static List<LocalDate> getDatesBetweenUsingJava9(
  LocalDate startDate, LocalDate endDate) {  
    return startDate.datesUntil(endDate)
      .collect(Collectors.toList());
}

直接调用一次LocalDate.detesUnitil方法就能获取到日期范围,返回结果是一个Stream。


  • 全部评论(0)
最新发布的资讯信息
【计算机/互联网|】小红书账号交易要找靠谱的平台。(2021-09-18 10:28)
【计算机/互联网|】小红书账号转让要注意的流程(2021-09-17 10:56)
【技术支持|】认识__get及__set,并看看Laravel如何使用它们(2021-09-12 15:36)
【技术支持|】解决网站服务器遇到 Allowed memory exhausted 问题(2021-09-12 15:32)
【计算机/互联网|】MySQL Community 版本与MySQL企业版有什么不同? 有什么限制?(2021-06-18 09:06)
【技术支持|】如何获取两个日期之间的所有日期?(2021-06-11 08:08)
【技术支持|】Laravel-S (Swoole 加速) 的初步探索整理(2021-06-10 17:15)
【计算机/互联网|】PHP7无法载入LDAP的解决方式(2021-06-10 10:46)
【计算机/互联网|】win10下PHP的安装与设定(2021-06-09 08:41)
【计算机/互联网|】C# MVC View 底下字串(string)的显示方式(2021-06-08 11:05)
联系我们
工作时间:8:00-23:30
客服 QQ:93613971
邮 箱:admin#zhisu.com
法律顾问:聊城瀚诚律师事务所