이번에는, 문자열 형태의 두 날짜 사이의 차이 (일자) 를 구하는 예제를 설명드리겠습니다.


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Main {
	public static void main(String[] args) throws ParseException {
		final String DATE_PATTERN = "yyyy-MM-dd";
		final int MILLI_SECONDS_PER_DAY = 24 * 60 * 60 * 1000;
		String inputStartDate = "2017-02-27";
		String inputEndDate = "2017-03-03";
		SimpleDateFormat sdf = new SimpleDateFormat(DATE_PATTERN);
		Date startDate = sdf.parse(inputStartDate);
		Date endDate = sdf.parse(inputEndDate);
		long difference = (endDate.getTime() - startDate.getTime()) / MILLI_SECONDS_PER_DAY;
		System.out.println(difference);
	}
}


1 ~ 3 라인

예제에 필요한 class 들을 import 하는 문장입니다.


7 라인

SimpleDateFormat 객체를 생성할 때 필요한 날짜 패턴 상수입니다. 저는 편의상 "yyyy-MM-dd" 로 지정하였습니다. 입맞에 맞게 변행해서 사용하시면 됩니다.


8 라인

두 날짜 사이의 간격을 구할 때 밀리초 단위로 계산을 할 것이므로 이를 일자로 변경하기 위해서 24 * 60 * 60 * 1000 으로 나누어 줘야 합니다. (밀리초 / (24 * 60 * 60 * 1000) -> 일자) 이 때 필요한 24 * 60 * 60 * 1000 을 상수로 지정하였습니다.


9 ~ 10 라인

차이 간격을 구할 두 날짜 문자열입니다. 7 라인에서 지정한 날짜 패턴의 형태로 두 날짜를 지정해 주면 됩니다. 기본적으로 시작 날짜보다 끝 날짜보다 이전일 수 없다고 가정하겠습니다.


11 라인

String 형태의 날짜를 Date 형태의 날짜로 편하게 변환하기 위해서 필요한 SimpleDateFormat 객체를 "yyyy-MM-dd" 패턴으로 생성합니다.


12 ~ 13 라인

SimpleDateFormat 객체의 parse 메소드를 통해서 9 ~ 10 라인의 두 String 형태의 날짜를 Date 형태의 날짜로 변경합니다. 이 parse 메소드는 ParseException 을 throws 하고 있습니다. 이 예제에서는 예외 처리가 중심이 아니기 때문에 저 또한 6 라인의 throws ParseException 구문을 통해서 예외 처리를 회피하도록 하겠습니다.


14 ~ 15 라인

Date 객체의 getTime 메소드를 통해서 해당 날짜를 밀리초로 받을 수 있습니다. 끝 날짜의 밀리초 - 시작 날짜의 밀리초 연산을 통해서 두 날짜 사이의 밀리초 간격을 구하고 이를 24 * 60 * 60 * 1000 으로 나누어 주면 일자 간격을 구할 수 있습니다. 구한 일자 간격을 출력합니다.


[실행 결과]




(SimpleDateFormat 클래스 참고)

https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html


(Date 클래스 참고)

https://docs.oracle.com/javase/8/docs/api/java/util/Date.html

by kkikkodev 2017. 3. 28. 13:56