Language/Java

[Java] LocalDate, DateTimeFormatter 클래스

비나래 2021. 8. 16. 11:05

코딩테스트 문제를 풀다보면, 날짜의 개념을 사용해야 하는 경우가 있다.

 

예를 들어, 08월 16일에서 며칠이 지나야 12월 31일이 되는지 알아야 하는 경우.

8월, 9월, 10월, 11월, 12월 각각이 며칠인지 배열에 저장하고 이를 셀 것이다.

 

public class Example {
	public static void main (String args[]) {
	    int dayOfMonths[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; // 0월 ~ 12월의 일 수

	    String input = "08-16";                              // 예시 형태 : MM-DD              
	    String[] inputParser = new String[2];                // 월과 일을 저장할 String 배열 선언
	    inputParser = input.split("-");                      // input의 형식에 맞게 split       
	
	    int fromMonth = Integer.valueOf(inputParser[0]);
	    int fromDay = Integer.valueOf(inputParser[1]);
	    int fromTotalDays = 0;
	
	    for (int month = 1; month < fromMonth; ++month) {
	    	fromTotalDays += dayOfMonths[month];             // 매월 전까지 더하기
	    }
	    fromTotalDays += fromDay;                            // 일 수 더하기
	
	    System.out.println(fromTotalDays);                   // [출력] 228
	}
}

 

헌데, 위의 방식은 1월부터 12월에 해당하는 날짜를 직접 하드코딩 해야 한다.

이때 사용할 수 있는 class가 LocalDate이다.

 

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class note {
	public static void main(String[] args) {
		String input = "2021-08-16";                   // yyyy-MM-dd
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
		LocalDate parsedDate = LocalDate.parse(input, formatter);
		
		System.out.println(parsedDate);                // [출력] 2021-08-16
		System.out.println(parsedDate.getDayOfYear()); // [출력] 228
	}
}

 

위와 같이 DateTimeFormatter.ofPattern( )에서 yyyy로 년도, MM으로 월, dd로 일을 표기해준다.

이를 LocalDate.parse( )에 input과 함께 넣어주면, 날짜 계산을 쉽게할 수 있는 LocalDate 객체를 만들 수 있다.