Java LocalDate를 활용한 두 날짜 사이 간격 계산

sycho·2023년 11월 27일
0

Java

목록 보기
15/18

심심풀이로 백준을 풀다가 두 날짜가 주어졌을 때 몇일이 차이가 나는지에 대한 문제를 풀게 되었다.

윤년까지 고려해야 했는데, 어려운 문제는 아니지만 Java 자체에 이걸 손쉽게 풀어줄 수 있는 패키지가 있는지를 찾아봤다.

가장 먼저 찾을 수 있었던 내용은 java.util.Date를 사용해서 날짜 차이를 구하는 것이었다.

문제는 저건 윤년을 고려하지 않는다(...) 그래서 윤년을 고려한 계산은 아예 없는건가...라고 생각을 했는데 Java8부터 지원되는 것이 하나 있었다.

바로 LocalDateChronoUnit을 활용해가지고 계산하는 것이다. 각각 java.timejava.temporal에 속하는 class다.

LocalDate

doc

time-zone을 신경쓰지 않는 날짜 객체로, 연도-달-일의 구조를 가진다.

of method를 활용해서 간단히 만들 수 있다.

import java.time.LocalDate;
...
LocalDate date1 = LocalDate.of(2022, 1, 1);
...

ChronoUnit

doc

사실 이 녀석이 핵심이다. 두 날짜 사이의 간격을 여러 단위로 측정하는데 도움을 주는 녀석이다.

원하는 단위를 택한 다음에 between method를 사용하면 된다. 단위가 뭐가 있는지는 doc 참고.

'일' 단위로 차이를 알고 싶으면 다음과 같이 하자.

import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int year1 = sc.nextInt(), month1 = sc.nextInt(), day1 = sc.nextInt();
        int year2 = sc.nextInt(), month2 = sc.nextInt(), day2 = sc.nextInt();

        LocalDate date1 = LocalDate.of(year1, month1, day1);
        LocalDate date2 = LocalDate.of(year2, month2, day2);

        long daysBetween12 = ChronoUnit.DAYS.between(date1, date2);

        System.out.println("D-" + daysBetween12);
        sc.close();
    }
}

밑은 예시 출력이다. 2004년 1월 1일과 2005년 1월 1일 사이의 '일'단위 차이가 366으로 제대로 나옴을 볼 수 있다. 2004년이 윤년이기 때문.

2004 1 1
2005 1 1
D-366
profile
안 흔하고 싶은 개발자. 관심 분야 : 임베디드/컴퓨터 시스템 및 아키텍처/웹/AI

0개의 댓글