多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# Java – 日期流 > 原文: [https://howtodoinjava.com/java9/stream-dates-datesuntil/](https://howtodoinjava.com/java9/stream-dates-datesuntil/) 对于 Java 开发人员而言,日期和时间处理一直是一个痛苦的领域。 Java 8 中添加的[新的 Date-Time API ](//howtodoinjava.com/java8/date-and-time-api-changes-in-java-8-lambda/)更改了在 Java 中与日期进行交互的方式。 这是一项非常强大且急需的改进。 唯一缺少的是获得日期的[流](//howtodoinjava.com/java8/java-8-tutorial-streams-by-examples/),在两个后续日期之间存在一些共同的[差异](//howtodoinjava.com/java8/calculate-difference-between-two-dates-in-java/)(尽管有可能,但没有简便的方法)。 Java 9 引入了一种新方法[`LocalDate.datesUntil()`](https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html),该方法可以提供日期流。 使用`datesUntil()`可以轻松创建具有固定偏移量的日期流。 ## 1\. `LocalDate.datesUntil()`的语法 此方法有两种重载形式: ```java Stream<LocalDate> datesUntil(LocalDate end) Stream<LocalDate> datesUntil(LocalDate end, Period step) ``` 第一个版本(即不带`Period`)内部调用带有`Period.ofDays(1)`的第二个方法,并生成日期流,两者之间相差 1 天。 ## 使用`LocalDate.datesUntil()`的日期流示例 创建日期流非常简单明了。 ```java import java.time.LocalDate; import java.time.Period; import java.util.List; import java.util.stream.Collectors; public class Java9StreamExamples { public static void main(String[] args) { System.out.println( getDaysInJava9(LocalDate.now(), LocalDate.now().plusDays(10)) ); System.out.println( getDaysInJava9Weeks(LocalDate.now(), LocalDate.now().plusWeeks(10)) ); } //Stream of dates with 1 day difference public static List<LocalDate> getDaysInJava9(LocalDate start, LocalDate end) { return start.datesUntil(end).collect(Collectors.toList()); } //Stream of dates with 1 week difference public static List<LocalDate> getDaysInJava9Weeks(LocalDate start, LocalDate end) { return start.datesUntil(end, Period.ofWeeks(1)).collect(Collectors.toList()); } } Output: [2017-07-31, 2017-08-01, 2017-08-02, 2017-08-03, 2017-08-04, 2017-08-05, 2017-08-06, 2017-08-07, 2017-08-08, 2017-08-09] [2017-07-31, 2017-08-07, 2017-08-14, 2017-08-21, 2017-08-28, 2017-09-04, 2017-09-11, 2017-09-18, 2017-09-25, 2017-10-02] ``` ## 2\. Java 8 中的日期流 如果您仍未使用 Java 9,则可以使用以下给定的方法生成 Date 流。 该代码与 [Java 8](//howtodoinjava.com/java-8-tutorial/) 兼容。 ```java import java.time.LocalDate; import java.time.Period; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class Java9StreamExamples { public static void main(String[] args) { System.out.println( getDaysInJava8(LocalDate.now(), 10) ); } //Stream of dates with 1 day difference public static List<LocalDate> getDaysInJava8(LocalDate start, int days) { return Stream.iterate(start, date -> date.plusDays(1)) .limit(days) .collect(Collectors.toList()); } } Output: [2017-07-31, 2017-08-01, 2017-08-02, 2017-08-03, 2017-08-04, 2017-08-05, 2017-08-06, 2017-08-07, 2017-08-08, 2017-08-09] ``` 将我的问题放在评论部分。 学习愉快!