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


자바에서 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 등의 프로그래밍 언어를 소개 합니다.

,




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


이번에 포스팅 할 내용은 특정 날짜에 원하는 날 만큼 + / - 하는 방법입니다. 


오늘 부터 한달 후는 몇 일 일까요? 

연인과 사귄 날로 부터 100일째 되는 날이 언제일까요? 


이런것들을 구하는 방법들에 대해 알아 보겠습니다. 



■ 오늘로 부터 한달 후는 몇일 일까?


1
2
3
4
5
6
7
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
 
Calendar cal = Calendar.getInstance();
System.out.println("오늘 날짜: "+sdf.format(cal.getTime()));
        
cal.add(Calendar.MONTH, 1);
System.out.println("오늘로 부터 한달 후: "+sdf.format(cal.getTime()));
cs


Calendar 클래스에서 제공하는 add 라는 함수를 사용했습니다. 


결과는 아래와 같습니다.


오늘 날짜: 2018/01/10

오늘로 부터 한달 후: 2018/02/10



■ 연인과 1일차인 2018년 1월 1일로 부터 100일째는?

1
2
3
4
5
6
7
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
 
Calendar cal = new GregorianCalendar(2018, Calendar.JANUARY, 1);
System.out.println("연인과 1일차: "+sdf.format(cal.getTime()));
        
cal.add(Calendar.DAY_OF_MONTH, 100);
System.out.println("연인과 사귄지 100일째: "+sdf.format(cal.getTime()));
cs

달을 구할때와 같이 이번에도 Calendar 클래스의 add 함수를 사용 했습니다. 

단, 이번에는 Calendar.MONTH 대신 Calendar.DAY_OF_MONTH 에 100일을 더했습니다. 


결과는 아래와 같습니다. 


연인과 1일차: 2018/01/01

연인과 사귄지 100일째: 2018/04/11



■ 기준일로 부터 이전 날짜 구하기


위 두가지 예제는 앞으로 몇달 후 또는 몇일 후 를 구하는 방식이었습니다. 

반대로 지나간 날짜를 구하는 방법은 어떻게 될까요? 


아주 간단합니다. 

입력 값을 양수 값이 아닌 음수 값으로 넣어 주면 됩니다. 


두번째 예제 결과 값인 2018년 4월 11일로 부터 101일 전이 몇일 인지 구해 보겠습니다. 


1
2
3
4
5
6
7
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
 
Calendar cal = new GregorianCalendar(2018, Calendar.APRIL, 11);
System.out.println("기준일: "+sdf.format(cal.getTime()));
        
cal.add(Calendar.DAY_OF_MONTH, -101);
System.out.println("기준일로 부터 101전: "+sdf.format(cal.getTime()));
cs


add 함수를 사용 했지만 음수 값을 입력했습니다. 

결과는 아래와 같습니다. 


기준일: 2018/04/11

기준일로 부터 101전: 2017/12/31



■ 오늘로 부터 한달 열흘 후 날짜 구하기


이번에는 몇 일 또는 몇 달이 아닌 한달 + 10일 이라는 값을 구하려고 합니다. 

어떻게 하면 될까요? 

눈치 빠르신 분들은 벌써 답을 찾으셨을 것 같습니다. 


한달을 add 한 값에 다시 10일을 add 하면 되겠죠? 

코드는 아래와 같습니다. 


1
2
3
4
5
6
7
8
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
 
Calendar cal = Calendar.getInstance();
System.out.println("오늘 날짜: "+sdf.format(cal.getTime()));
        
cal.add(Calendar.MONTH, 1);
cal.add(Calendar.DAY_OF_MONTH, 10);
System.out.println("오늘로 부터 한달 열흘 후: "+sdf.format(cal.getTime()));
cs


결과 값은 아래와 같습니다. 


오늘 날짜: 2018/01/10

오늘로 부터 한달 열흘 후: 2018/02/20



위와 같은 방식으로 여러 조합을 이용하여 원하는 값을 쉽게 가져 올 수 있습니다. 


잘 이용 하시길 바랍니다 :)



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

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

감사합니다 :D



블로그 이미지

쉬운코딩이최고

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

,




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


앞서 Calendar 객체를 이용하여 원하는 날짜 및 시간 정보를 셋팅하고 이를 프린트 해봤는데요. 

이번에는 조금 다른 방법으로 데이터를 셋팅해 보겠습니다. 


GregorianCalendar 클래스를 이용하는 방법입니다. 

(참고) https://docs.oracle.com/javase/7/docs/api/java/util/GregorianCalendar.html




■ GregorianCalendar 클래스 생성자 


GregorianCalendar 클래스는 몇가지 생성자를 제공하고 있습니다. 그중 우리가 관심있는 몇 가지만 살펴 보겠습니다. 


public GregorianCalendar(int year,
                 int month,
                 int dayOfMonth)

GregorianCalendar 생성자 중 가장 기본으로 생각 됩니다. 세가지 파라미터 값을 입력 받으며 년,월,일 을 표기 합니다. 

GregorianCalendar(년, 월, 일) 형태의 입력을 받습니다. 


public GregorianCalendar(int year,
                 int month,
                 int dayOfMonth,
                 int hourOfDay,
                 int minute)

GregorianCalendar(년도, 월, 일, 시, 분) 형식으로 입력 하는 생성자를 제공하고 있습니다. 


public GregorianCalendar(int year,
                 int month,
                 int dayOfMonth,
                 int hourOfDay,
                 int minute,
                 int second)

GregorianCalendar(년도, 월, 일, 시, 분, 초) 형식으로 입력 하는 생성자를 제공하고 있습니다. 



■ GregorianCalendar 예제


Calendar cal = new GregorianCalendar(2018,0,5,1,13,56);

위에서 정리한 생성자 중 세번째 생성자를 사용하여 초단위까지 입력을 했습니다. 

입력 값은 2018년 1월 5일 1시 13분 56 초 입니다. 


물론 1월 (Calendar.MONTH == 0) 을 설정하는데 왜 0 을 입력 했냐는 질문을 안하시리라 믿습니다 :)


위 코드는 아래와 같이 변경 가능합니다. 

Calendar cal = new GregorianCalendar(2018,Calendar.JANUARY,5,1,13,56);

이제 설정한 값을 앞선 포스팅과 같이 프린트 해보겠습니다. 


int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int date = cal.get(Calendar.DATE);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);

int hour = cal.get(Calendar.HOUR);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);

String korDayOfWeek = "";
switch (dayOfWeek) {
case 1:
korDayOfWeek = "일";
break;
case 2:
korDayOfWeek = "월";
break;
case 3:
korDayOfWeek = "화";
break;
case 4:
korDayOfWeek = "수";
break;
case 5:
korDayOfWeek = "목";
break;
case 6:
korDayOfWeek = "금";
break;
case 7:
korDayOfWeek = "토";
break;
}

System.out.println(year+"."+month+"."+date+"("+korDayOfWeek+") "+hour+":"+minute+":"+second);

결과는 아래와 같이 리턴 됩니다. 


2018.1.5(금) 1:13:56


cal.set(Calendar.YEAR, 2018);
cal.set(Calendar.MONTH, Calendar.JANUARY);
cal.set(Calendar.DATE, 5);

cal.set(Calendar.HOUR, 1);
cal.set(Calendar.MINUTE, 13);
cal.set(Calendar.SECOND, 56);

위와 같이 일일이 셋팅 해주는 것 보다는 GregorianCalendar 객체를 이용하는 것이 더욱 편하겠죠? ^^




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

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

감사합니다 :D




블로그 이미지

쉬운코딩이최고

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

,