특정 타임스탬프를 기준으로 날짜 차이를 계산해야 할 때가 있습니다.
이 작업을 직접 구현하기에는 매 달마다 일 수가 다르고, 윤년까지 고려해야 하기 때문에 번거롭습니다.
Period 클래스의 between 메소드를 이용하면, 이를 간단히 해결할 수 있습니다.
LocalDateTime 객체에 [년, 월, 일, 시, 분, 초] 정보를 임의로 저장하여 테스트해보겠습니다.
1. 평년일 때
public static void main(String[] args) {
System.out.println("평년(2023) 테스트");
LocalDateTime startDT = LocalDateTime.of(2023, 2, 28, 0, 0, 0);
LocalDateTime endDT = LocalDateTime.of(2023, 3, 1, 0, 0, 0);
System.out.println("시작일: " + startDT.toLocalDate());
System.out.println("종료일: " + endDT.toLocalDate());
Period diff = Period.between(startDT.toLocalDate(), endDT.toLocalDate());
System.out.printf("두 날짜 사이 기간: %d년 %d월 %d일",
diff.getYears(), diff.getMonths(), diff.getDays());
}
출력 결과
평년인 2023년 2월은 28일까지 존재하기 때문에, 3월 1일과 하루 차이가 납니다.
2. 윤년일 때
public static void main(String[] args) {
System.out.println("윤년(2024) 테스트");
LocalDateTime startDT = LocalDateTime.of(2024, 2, 28, 0, 0, 0);
LocalDateTime endDT = LocalDateTime.of(2024, 3, 1, 0, 0, 0);
System.out.println("시작일: " + startDT.toLocalDate());
System.out.println("종료일: " + endDT.toLocalDate());
Period diff = Period.between(startDT.toLocalDate(), endDT.toLocalDate());
System.out.printf("두 날짜 사이 기간: %d년 %d월 %d일",
diff.getYears(), diff.getMonths(), diff.getDays());
}
출력 결과
윤년인 2024년 2월은 29일까지 존재하기 때문에, 3월 1일과 이틀 차이가 납니다.
Period 클래스의 between 메소드를 사용하면 나름 정확한 결과를 얻을 수 있는 것을 확인해보았습니다.
개발 시 로그를 다룰 때나, 기업 코딩테스트에서 유용하게 쓰일 기능으로 보입니다.
'Study in SSAFY > Algorithm' 카테고리의 다른 글
[Java] 십진수를 이진수로 변환하기(int to String) / 이진수를 십진수로 변환하기(String to int) (0) | 2023.02.22 |
---|