Java Stream流生成从指定日期到当前日期的所有日期/时间范围

简介: Java Stream流生成从指定日期到当前日期的所有日期/时间范围

介绍

好的,以下是一个概述Java 8日期功能,并给出实现一个使用Stream流生成从指定日期到当前日期的所有日期/时间范围的例子。


Java 8引入了新的日期/时间API,它提供了更好的API设计、类型安全、线程安全和可读性,提高了代码的健壮性和可维护性。这个API包含了java.time包,其中包含了LocalDate、LocalDateTime、LocalTime、ZonedDateTime等各种日期和时间相关的类和方法。这些新的API也提供了流式API设计,可以使用Stream流来实现需要的日期/时间范围。


获取LocalDate类型区间

/**
 * 获取日期区间
 *
 * @param startDate 开始日期
 * @param endDate   结束日期
 * @return {@link List}<{@link LocalDate}>
 */
public List<LocalDate> getLocalDateRanges(LocalDate startDate, LocalDate endDate) {
    return Stream.iterate(startDate, d -> d.plusDays(1))
            .limit(ChronoUnit.DAYS.between(startDate, endDate) + 1)
            .collect(Collectors.toList());
}

获取LocalDateTime类型区间

/**
 * 获取时间区间
 *
 * @param startDateTime 开始日期时间
 * @param endDateTime   结束日期时间
 * @return {@link List}<{@link LocalDateTime}>
 */
public static List<LocalDateTime> getLocalDateTimeRanges(LocalDateTime startDateTime, LocalDateTime endDateTime) {
    return Stream.iterate(startDateTime, d -> d.plusDays(1))
            .limit(ChronoUnit.DAYS.between(startDateTime.toLocalDate(), endDateTime.toLocalDate()) + 1)
            .collect(Collectors.toList());
}

测试打印日志

public static void main(String[] args) {
   List<LocalDateTime> localDateTimeRanges = getLocalDateTimeRanges(LocalDateTime.of(2023, 5, 1, 0, 0), LocalDateTime.now());
   System.out.println(localDateTimeRanges);
}

控制台输出

[2023-05-01T00:00, 2023-05-02T00:00, 2023-05-03T00:00, 2023-05-04T00:00, 2023-05-05T00:00, 2023-05-06T00:00, 2023-05-07T00:00, 2023-05-08T00:00, 2023-05-09T00:00, 2023-05-10T00:00, 2023-05-11T00:00, 2023-05-12T00:00, 2023-05-13T00:00, 2023-05-14T00:00, 2023-05-15T00:00, 2023-05-16T00:00, 2023-05-17T00:00, 2023-05-18T00:00, 2023-05-19T00:00, 2023-05-20T00:00, 2023-05-21T00:00, 2023-05-22T00:00, 2023-05-23T00:00, 2023-05-24T00:00, 2023-05-25T00:00, 2023-05-26T00:00, 2023-05-27T00:00, 2023-05-28T00:00, 2023-05-29T00:00, 2023-05-30T00:00, 2023-05-31T00:00, 2023-06-01T00:00]
相关文章
|
2月前
|
安全 Java API
告别繁琐编码,拥抱Java 8新特性:Stream API与Optional类助你高效编程,成就卓越开发者!
【8月更文挑战第29天】Java 8为开发者引入了多项新特性,其中Stream API和Optional类尤其值得关注。Stream API对集合操作进行了高级抽象,支持声明式的数据处理,避免了显式循环代码的编写;而Optional类则作为非空值的容器,有效减少了空指针异常的风险。通过几个实战示例,我们展示了如何利用Stream API进行过滤与转换操作,以及如何借助Optional类安全地处理可能为null的数据,从而使代码更加简洁和健壮。
72 0
|
13天前
|
存储 Java API
Java——Stream流详解
Stream流是JDK 8引入的概念,用于高效处理集合或数组数据。其API支持声明式编程,操作分为中间操作和终端操作。中间操作包括过滤、映射、排序等,可链式调用;终端操作则完成数据处理,如遍历、收集等。Stream流简化了集合与数组的操作,提升了代码的简洁性
36 11
Java——Stream流详解
|
2天前
|
Java API
Java的日期类都是怎么用的
【10月更文挑战第1天】本文介绍了 Java 中处理日期和时间的三个主要类:`java.util.Date`、`java.util.Calendar` 和 `java.time` 包下的新 API。`Date` 类用于表示精确到毫秒的瞬间,可通过时间戳创建或获取当前日期;`Calendar` 抽象类提供丰富的日期操作方法,如获取年月日及时区转换;`java.time` 包中的 `LocalDate`、`LocalTime`、`LocalDateTime` 和 `ZonedDateTime` 等类则提供了更为现代和灵活的日期时间处理方式,支持时区和复杂的时间计算。
26 14
|
22天前
|
Java API C++
Java 8 Stream Api 中的 peek 操作
本文介绍了Java中`Stream`的`peek`操作,该操作通过`Consumer&lt;T&gt;`函数消费流中的每个元素,但不改变元素类型。文章详细解释了`Consumer&lt;T&gt;`接口及其使用场景,并通过示例代码展示了`peek`操作的应用。此外,还对比了`peek`与`map`的区别,帮助读者更好地理解这两种操作的不同用途。作者为码农小胖哥,原文发布于稀土掘金。
Java 8 Stream Api 中的 peek 操作
|
22天前
|
Java C# Swift
Java Stream中peek和map不为人知的秘密
本文通过一个Java Stream中的示例,探讨了`peek`方法在流式处理中的应用及其潜在问题。首先介绍了`peek`的基本定义与使用,并通过代码展示了其如何在流中对每个元素进行操作而不返回结果。接着讨论了`peek`作为中间操作的懒执行特性,强调了如果没有终端操作则不会执行的问题。文章指出,在某些情况下使用`peek`可能比`map`更简洁,但也需注意其懒执行带来的影响。
Java Stream中peek和map不为人知的秘密
|
3天前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
12 3
|
13天前
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
|
5天前
|
安全 Java API
时间日期API(Date,SimpleDateFormat,Calendar)+java8新增日期API (LocalTime,LocalDate,LocalDateTime)
这篇文章介绍了Java中处理日期和时间的API,包括旧的日期API(Date、SimpleDateFormat、Calendar)和Java 8引入的新日期API(LocalTime、LocalDate、LocalDateTime)。文章详细解释了这些类/接口的方法和用途,并通过代码示例展示了如何使用它们。此外,还讨论了新旧API的区别,新API的不可变性和线程安全性,以及它们提供的操作日期时间的灵活性和简洁性。
|
8天前
|
Java 程序员 API
Java 8新特性之Lambda表达式与Stream API的探索
【9月更文挑战第24天】本文将深入浅出地介绍Java 8中的重要新特性——Lambda表达式和Stream API,通过实例解析其语法、用法及背后的设计哲学。我们将一探究竟,看看这些新特性如何让Java代码变得更加简洁、易读且富有表现力,同时提升程序的性能和开发效率。
|
7天前
|
SQL Java Linux
Java 8 API添加了一个新的抽象称为流Stream
Java 8 API添加了一个新的抽象称为流Stream
下一篇
无影云桌面