Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 9의 LocalDate.datesUntil() 메서드로 두 날짜 사이의 날짜 스트림 생성하기

Java 9에서 도입된 LocalDate.datesUntil() 메서드는 두 개의 LocalDate 인스턴스 사이에 날짜 스트림(Stream)을 생성해 주며, 필요에 따라 단계 크기(step)까지 지정할 수 있습니다. 이 메서드는 두 가지 오버로드된 형태로 제공됩니다.

datesUntil() 메서드의 두 가지 형태

  • 첫 번째 형태: 종료 날짜(end date)만 인수로 받습니다. 현재 날짜부터 종료 날짜까지의 모든 날짜를 하루 단위로 포함하는 스트림을 반환합니다.
  • 두 번째 형태: 종료 날짜와 함께 Period 객체를 매개변수로 받습니다. 이를 통해 특정 간격으로 날짜를 건너뛰면서 시작 날짜와 종료 날짜 사이에서 선택된 날짜들만 스트리밍할 수 있습니다.

문법

public Stream<LocalDate> datesUntil(LocalDate end)
public Stream<LocalDate> datesUntil(LocalDate end, Period step)

예제

아래 예제에서는 1980년 8월 8일부터 같은 해 12월 25일까지의 날짜를 다룹니다. 첫 번째 스트림은 하루 단위로 모든 날짜를 생성한 뒤 skip(50)limit(10)을 사용해 일부만 출력하고, 두 번째 스트림은 Period.ofMonths(1)를 지정하여 한 달 간격의 날짜만 추출합니다.

import java.time.LocalDate;
import java.time.Period;
import java.time.Month;
import java.util.stream.Stream;

public class DatesUntilMethodTest {
   public static void main(String args[]) {
      final LocalDate myBirthday = LocalDate.of(1980, Month.AUGUST, 8);
      final LocalDate christmas = LocalDate.of(1980, Month.DECEMBER, 25);

      System.out.println("Day-Stream:\n");
      final Stream<LocalDate> daysUntil = myBirthday.datesUntil(christmas);
      daysUntil.skip(50).limit(10).forEach(System.out::println);

      System.out.println("\nMonth-Stream:\n");
      final Stream<LocalDate> monthsUntil = myBirthday.datesUntil(christmas, Period.ofMonths(1));
      monthsUntil.limit(5).forEach(System.out::println);
   }
}

실행 결과

Day-Stream:

1980-09-27
1980-09-28
1980-09-29
1980-09-30
1980-10-01
1980-10-02
1980-10-03
1980-10-04
1980-10-05
1980-10-06

Month-Stream:

1980-08-08
1980-09-08
1980-10-08
1980-11-08
1980-12-08

실행 결과를 보면 Day-Stream은 생일부터 크리스마스까지의 날짜 중 51번째 날짜부터 10개가 출력되었고, Month-Stream은 한 달 간격인 매월 8일의 날짜만 순서대로 출력된 것을 확인할 수 있습니다.