안녕하세요. 제임스 입니다. 


자바에서 D-Day 구하는 방법에 대해 알아 보겠습니다. 


D-Day 란 오늘로 부터 특정 일자까지 남은 기간을 의미합니다. 

즉, 오늘과 특정 지정일의 차를 의미 하는 것입니다. 


앞서 두 날자 간 차를 구하는 방법에 대해 포스팅 했었습니다. 

Calendar.getTimeInMlls() 두 날자 간 차 구하기 포스팅 보러 가기 ( http://jamesdreaming.tistory.com/103 )


이를 이용하여 D-Day 구하는 코드를 작성해 보겠습니다. 


두 날자 간 차를 구하기 위해서는 Calendar Class 의 getTimeInMills() 함수를 이용하여 천분의 1초 단위까지 계산을 합니다. 


오늘 날자와 D-Day 날자 선언을 합니다. 

1
2
Calendar today = Calendar.getInstance();
Calendar d_day = Calendar.getInstance();
cs


d_day 를 2018년 8월 19일로 설정해 보겠습니다. 

1
d_day.set(2018, Calendar.AUGUST, 19);
cs


두 날자를 getTimeInMills() 함수를 이용하여 날자정보를 가져 오겠습니다. 

이때 천분의 1초단위 값이기 때문에 24시간 * 60분 * 60초 * 1000  한 값(하루의 밀리세컨 값)으로 나눠서 일단위 값을 리턴 받습니다. 

1
2
long l_dday = dday.getTimeInMillis() / (24*60*60*1000);
long l_today = today.getTimeInMillis() / (24*60*60*1000);
cs


이제 이 두값의 차를 구해 보겠습니다. 

오늘 날자로 부터 남은 기간이기 때문에 큰 날자에서 빼지 않고 작은 날자 (오늘날자) 에서 빼는 것으로 하겠습니다. 

1
long substract = l_today - l_dday;
cs


오늘 날자 (2018.1.29) 로 부터 8월 19일 까지 D-Day 결과 값은 -202 가 나옵니다. 




제대로 나온 값일 까요? 

검증 하는 방법은 앞선 포스팅 ( 날자 계산하기 - 날자 더하기 / 빼기 포스팅 보러가기 )에서 다뤘습니다. 

다시 한번 해볼까요? 

1
2
3
4
5
6
7
8
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
            
Calendar targetDate = Calendar.getInstance();
            
targetDate.set(2018, Calendar.AUGUST, 19);
targetDate.add(Calendar.DAY_OF_MONTH, -202);
            
System.out.println("ret = "+sdf.format(targetDate.getTime()));
cs


결과는 아래와 같이 나옵니다.

ret = 2018/01/29


테스트 진행한 당일 날자가 제대로 나왔습니다. 


간단하죠? ^^




D-Day 구하는 코드를 인자 값을 받을 수 있는 함수 형태로 작성하고 main() 함수에 호출 하는 예제로 풀로 작성 해 보겠습니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static int getDDay(int _year, int _month, int _day){
        try {
            
            Calendar today = Calendar.getInstance();
            Calendar d_day = Calendar.getInstance();
            
            d_day.set(_year, _month, _day);
            
            long l_dday = d_day.getTimeInMillis() / (24*60*60*1000);
            long l_today = today.getTimeInMillis() / (24*60*60*1000);
            
            long substract = l_today - l_dday;
            return (int)substract;
 
        } catch (Exception e) {
            return -1;
        }
}
    
public static void main(String[] args) {
        System.out.println("8월 19일까지 D-Day = "+getDDay(2018, Calendar.AUGUST, 19));
}
cs




 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D





블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,