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


자바에서 사용하는 함수들 중 xxxValue() 라는 형태의 함수들을 종종 보실 수 있습니다. 

이 함수들에 대해 간단히 설명 하고자 합니다. 


xxxValue() 함수는 함수를 호출하는 Number 객체의 값을 함수에서 반환된 primitive data type 으로 변환 합니다.


※ primitive data type 이란 자바 키워드로 정의 되어 있는 byte, short, int, long, double, boolean 등의 타입을 의미 합니다. 이런 primitive data type 을 제외한 다른 타입들은 모두 reference data type 이라고 부릅니다. 

이와 관련된 내용은 차후 다시 다루도록 하겠습니다. 


Syntax

각각의 primitive data type 의 함수 형태는 아래와 같습니다. 

byte byteValue()
short shortValue()
int intValue()
long longValue()
float floatValue()
double doubleValue()


파라미터를 별도로 입력 받지 않고 아래와 같은 방법으로 사용 합니다. 


1
2
3
4
5
6
7
8
9
Integer x = 7;
          
System.out.println( x.byteValue() );
 
System.out.println( x.longValue() );
        
System.out.println( x.doubleValue() );
        
System.out.println( x.floatValue() );
cs


Integer 형으로 초기화 했습니다. 

만약 int 형으로 초기화 한다면 위와 같은 방법으로 사용 할 수 없습니다. Number 객체의 값을 primitive data type 으로 변환 하는 것이기 때문입니다. int 형은 이미 primitive data type 입니다. 


결과는 아래와 같습니다. 


7

7

7.0

7.0




다른 예로 이번에는 Float 형의 값을 지정해 보겠습니다. 


1
2
3
4
5
6
7
8
9
Float y = 10.15f;
        
System.out.println( y.byteValue() );
 
System.out.println( y.longValue() );
        
System.out.println( y.doubleValue() );
        
System.out.println( y.floatValue() );
cs



위 코드의 결과 값은 아래와 같습니다. 


10

10

10.149999618530273

10.15




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

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

감사합니다 :D




블로그 이미지

쉬운코딩이최고

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

,



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


문자열을 숫자로 변환시키는 방법으로 자바에서는 Integer.parseInt 를 사용합니다. 


parseInt 함수는 Integer 클래스의 static 함수입니다. 


형태는 아래와 같이 두가지가 있습니다. 



Integer.parseInt(String s)

숫자형의 문자열을 인자 값으로 받으면 해당 값을 10진수의 Integer 형으로 반환 해줍니다. 

1
Integer.parseInt("1004")
cs


참고: https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt(java.lang.String)



Integer.parseInt(String s, int radix)

숫자형의 문자열을 첫번째 인자 값으로 받고 변환할 진수값을 입력하면 해당 진수에 맞춰 Integer 형으로 반환하여 줍니다. 

1
2
3
Integer.parseInt("2018"8);
Integer.parseInt("1004"10);
Integer.parseInt("1004"16);
cs


참고: https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt(java.lang.String,%20int)



Integer.parseInt("1004", 10) 의 결과 값은 Integer.parseInt("1004") 한 값과 동일 합니다. 

그래서 첫번째 Integer.parseInt(String s) 의 경우 10진수의  Integer 형을 반환한다고 명시 했습니다. 



1
2
3
4
System.out.println(Integer.parseInt("1004"));
System.out.println(Integer.parseInt("2018"8));
System.out.println(Integer.parseInt("1004"10));
System.out.println(Integer.parseInt("1004"16));

cs


위와 같이 예제로 사용한 함수를 프린트 해보겠습니다. 


결과는 아래와 같습니다. 


1004

516

1004 --> Integer.parseInt("1004") 한 값과 동일 합니다. 

4100



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

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

감사합니다 :D



블로그 이미지

쉬운코딩이최고

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

,



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


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

,



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


이번에는 For loop 중에서도 "향상된 For 문" (Enhanced For Loop) 에 대해 알아 보겠습니다. 


■ 기존 For Loop 


기존 For 문은 아래와 같습니다.


for( initialization; termination; increment ){

// statement(s)

}


1
2
3
for (int i = ; i < ; i++) {
    System.out.println("i = "+i);
}
cs


위 예문과 같이 변수 초기화, 종료조건, 변수 증감치에 대한 정의를 하는 것이 우리가 기존에 알고 있던 for loop 입니다. 


실행 결과는 아래와 같습니다. 


i = 0

i = 1

i = 2

i = 3

i = 4




■ 향상된 For 문 (Enhanced For Loop)


for ( declaration : expression ) {

// statement(s)

}


구조가 우리가 알고 있던 For loop 과 다릅니다. Java 5.0 이상부터 지원하는 for 문입니다. 

declaration > 변수 선언 

expression > 배열 또는 배열을 리턴하는 함수 (배열의 값을 변경 할 수는 없고 사용만 가능합니다)


예제를 보겠습니다. 

1
2
3
4
String[] strArr = {"향상된""FOR""LOOP""테스트"};
for(String arr : strArr){
    System.out.println(arr);
}
cs


위와 같은 형태로 배열을 사용하여 for 문을 돌립니다. 


실행 결과는 아래와 같습니다. 


향상된

FOR

LOOP

테스트



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

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

감사합니다 :D




블로그 이미지

쉬운코딩이최고

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

,




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


이번에는 두 날짜 간의 차이 구하는 방법에 대해 정리 해보겠습니다. 


몇월 몇일 부터 몇월 몇일 까지 몇일 차이인지 구하거나 특정일 까지 D-Day 를 구하거나 할때 사용 할 수 있는 방법입니다. 


우선 두 날짜간의 차이를 알기 위해 Calendar 클래스의 getTimeInMills() 라는 함수를 이용하여 천분의 일초 단위 까지 반환 합니다.

그리고 이 초 단위 값을 다시 일단위로 변환하여 최종적으로 두 날짜 간 일 차이를 구할 수 있습니다. 


아래 예제를 보시면 좀더 이해가 편하실 겁니다. 


1
2
Calendar baseCal = new GregorianCalendar(2018, Calendar.JANUARY, 11); // 기준 날짜 2018.1.11
Calendar targetCal = new GregorianCalendar(2018, Calendar.MAY, 24);// 비교대상 날짜 2018.5.24 
cs


기준 날짜를 2018년 1월 11일 로 비교 대상 날짜를 2018년 5월 24일 로 설정 했습니다. 


이제 두 날짜간 차이를 getTimeInMills() 함수를 이용하여 천분의 일초 단위로 변환 및 차를 구하겠습니다. 


1
long diffSec = (targetCal.getTimeInMillis() - baseCal.getTimeInMillis())/1000;
cs

천분의 1초 단위 이므로 1000 으로 나눠 초 단위로 변환 했습니다.


이제 다시 초단위를 일 단위로 변환 하겠습니다. 


1
long diffDays = diffSec / (24*60*60);
cs

1일은 24(시간) * 60(분) * 60(초) 초 이므로 diffSec 값에서 24*60*60 한 값을 나누면 일로 변환 됩니다. 


1
System.out.println("두 날짜간의 일수 차 = "+diffDays+" 일");
cs

위와 같이 결과 값을 프린트하면 아래와 같은 값을 리턴 합니다. 


두 날짜간의 일수 차 = 133 일


정말 133일 차이가 나는지는 앞서 포스팅했던 내용과 같이 기준날짜에 133일을 더하거나 비교대상 날짜에 133일을 빼면 알 수 있겠죠? 


1
2
3
4
5
6
7
8
9
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
System.out.println("----------------------------------------");
System.out.println("기준 날짜 = "+sdf.format(baseCal.getTime()));
System.out.println("비교 대상 날짜 = "+sdf.format(targetCal.getTime()));
System.out.println("----------------------------------------");
baseCal.add(Calendar.DAY_OF_MONTH, (int)diffDays);
System.out.println("기준날짜에 "+diffDays+" 일 만큼 더한 날짜 = "+sdf.format(baseCal.getTime()));
targetCal.add(Calendar.DAY_OF_MONTH, -(int)diffDays);
System.out.println("비교 대상 날짜에 "+diffDays+" 일 만큼 뺀 날짜 = "+sdf.format(targetCal.getTime()));
cs


yyyy/MM/dd 형태로 기준 날짜와 비교 대상 날짜를 먼저 프린트 합니다. 

이후 기준 날짜에 133일을 더하고 비교대상 날짜에서 133일 뺍니다. 


결과는 아래와 같습니다. 


-------------------------

기준 날짜 = 2018/01/11

비교 대상 날짜 = 2018/05/24

-------------------------

기준 날짜에 133 일 만큼 더한 날 = 2018/05/24

비교 대상 날에 133 일 만큼 뺀 날 = 2018/01/11


제대로 구해진것이 확인 됩니다. 



여기서 주의 할 점이 하나 있습니다. 

만약 기준 날짜를 Calendar.getInstance() 로 할 경우 오차가 생길 수 있습니다. 

천분의 일초 까지 계산을 하기 때문에 올림/내림의 변수가 존재 하여 원치 않는 결과 값이 나올 수 있습니다. 


아래 예제를 보여 드리겠습니다. 


1
2
3
Calendar baseCal1 = Calendar.getInstance(); // 기준 날짜 
Calendar baseCal2 = new GregorianCalendar(2018, Calendar.JANUARY, 11); // 기준 날짜 2018.1.11
Calendar targetCal = new GregorianCalendar(2018, Calendar.MAY, 24);// 비교대상 날짜 2018.5.24
cs


테스트 한 현재 시간 (2018년 1월 11일 오전 1시 59분) 으로 처음 예제와 동일한 날짜 이지만 시간이 초단위까지가 차이가 납니다. 


1
2
3
System.out.println("baseCal 초단위 값 ==> "+baseCal1.getTimeInMillis());
System.out.println("baseCal2 초단위 값 ==> "+baseCal2.getTimeInMillis());
System.out.println("targetCal 초단위 값 ==> "+targetCal.getTimeInMillis());
cs


위 코드 결과는 아래와 같습니다. 


baseCal1 초단위 값 ==> 1515603810414

baseCal2 초단위 값 ==> 1515596400000

targetCal 초단위 값 ==> 1527087600000


Calendar.getnstance() 한 값을 기준값 또는 비교값으로 설정 할 경우 +/- 1일 정도의 오차가 발생 할 수 있습니다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Calendar baseCal = Calendar.getInstance(); // 기준 날짜 
Calendar targetCal = new GregorianCalendar(2018, Calendar.MAY, 24);// 비교대상 날짜 2018.5.24 
 
long diffSec = (targetCal.getTimeInMillis() - baseCal.getTimeInMillis())/1000;
long diffDays = diffSec / (24*60*60);
 
System.out.println("두 날짜간의 일수 차 = "+diffDays+" 일");
 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
System.out.println("----------------------------------------");
System.out.println("기준 날짜 = "+sdf.format(baseCal.getTime()));
System.out.println("비교 대상 날 = "+sdf.format(targetCal.getTime()));
System.out.println("----------------------------------------");
baseCal.add(Calendar.DAY_OF_MONTH, (int)diffDays);
System.out.println("기준 날에 "+diffDays+" 일 만큼 더한 날 = "+sdf.format(baseCal.getTime()));
targetCal.add(Calendar.DAY_OF_MONTH, -(int)diffDays);
System.out.println("비교 대상 날에 "+diffDays+" 일 만큼 뺀 날 = "+sdf.format(targetCal.getTime()));
cs


위와 같이 Calendar.getInstance() 한 값을 기준으로 한 결과는 아래와 같습니다. 


두 날짜간의 일수 차 = 132 일

----------------------------------------

기준 날짜 = 2018/01/11

비교 대상 날짜 = 2018/05/24

----------------------------------------

기준 날짜에 132 일 만큼 더한 날짜 = 2018/05/23

비교 대상 날짜에 132 일 만큼 뺀 날짜 = 2018/01/12


분명 133일 차이가 나야 하는데 132일 차이가 나는 것으로 결과 값이 잘못 나옵니다. 

비교 대상이 잘못 되었기 때문이죠.


날짜 간의 비교를 해야 하는 경우라면 Calendar.getInstance() 대신 GregorianCalendar 를 이용하시거나 Calendar 클래스의 set 함수를 이용하여 원하는 날짜를 지정하는 것도 좋은 방법입니다. 



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

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

감사합니다 :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 등의 프로그래밍 언어를 소개 합니다.

,




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


계속해서 날짜 관련 코드 작성법에 대해 정리하고 있는데요. 오늘은 날짜를 원하는 형식으로 프린트 하는 방법에 대해 알아 보겠습니다. 

앞선 포스팅에서는 각각의 년, 월, 일, 시간 값들을 뽑아낸 후 아래와 같이 이쁘지 않은 형태로 프린트 했었습니다.


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


이렇게 프린트 하기 위해 너무 많은 코드를 작성해야 합니다. 


그래서 자바에서는  SimpleDateFormat 이라는 무지무지 고마운 클래스를 제공하고 있습니다. 

지금부터 이 SimpleDateFormat 에 대해 알아 보겠습니다. 


■ SimpleDateFormat


참고: https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html


이 클래스는 날짜를 원하는 포맷으로 파싱시켜 주는 역할을 합니다.

이때 사용하는 패턴들이 있는데요. 그 패턴 중 우리가 사용할 몇가지만 정리해보겠습니다. 


Letter

Date or Time Component

Presentation

Examples

y

Year

199696

M

Month

JulyJul07

d

Number

10

H

시간(24시간)

Number

0

h

시간(am/pm)

Number

12

m

Number

30

s

Number

55


예제를 보겠습니다. 


1
2
3
4
5
SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
 
Calendar cal = Calendar.getInstance();
        
System.out.println(sdf.format(cal.getTime()));
cs


위와 같이 simpleDateFormat 생성자에 패턴을 입력 했습니다. 

format 함수를 이용하여 프린트 하면 원하는 패턴의 날짜형식이 리턴되게 됩니다. 


yyyy > 2018 과 같이 년도를 4자리로 표현하라는 의미 입니다. 

MM > 시간의 분을 나타내는 mm 과 구분해야 하는데요. 대문자 MM 으로 써야 월을 의미합니다. 

dd > 일을 의미 합니다 (해당 달의 몇번째 일인지를 의미)

HH > 시간 중 시를 의미 하며 HH 는 24시간으로 표기 hh 는 12시간 기준으로 am/pm 을 추가로 표기 가능합니다. 

mm > 시간의 분을 나타내는 것으로 월을 의미하는 MM 과 구분해야 합니다. 

ss > 초를 의미 합니다. 


년도를 의미하는 yyyy를 제외한 MM.dd HH:mm:ss 들이 두자리로 표기되어 있습니다 .

월/일 시:분:초 모두 최대 두자리로 표기 되기 때문인데요. 한자리일 경우 그냥 한자리로 표기 됩니다. 


위 코드를 실행한 결과 값은 다음과 같습니다. 

2018.01.06 01:35:44


yyyy 대신 yy 만 사용하게 되면 년도의 마지막 두자리만 표기 됩니다. 


1
2
3
4
5
SimpleDateFormat sdf = new SimpleDateFormat("yy.MM.dd HH:mm:ss");
 
Calendar cal = Calendar.getInstance();
        
System.out.println(sdf.format(cal.getTime()));
cs


결과 값은 다음과 같습니다. 

18.01.06 01:47:47



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

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

감사합니다 :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 등의 프로그래밍 언어를 소개 합니다.

,




바로 전 포스팅에서 Calendar 객체를 이용하여 현재 날짜, 요일, 시간 정보를 가져 오는 방법에 대해 정리 했습니다. 


이번에는 원하는 날짜 및 시간 정보 등을 입력 하고 이를 다시 사용 하는 방법에 대해 정리 하겠습니다. 


String startDate = "20180505083000";

위와 같이 날짜 정보를 startDate 라는 변수에 String 형으로 입력 했습니다. 

2018년 5월 5일 08시 30분 00초 를 정의 한 텍스트 입니다. 


역시 Calender 객체를 이용하기 위해서는 Calendar.getInstance() 를 사용 합니다. 

Calendar cal = Calendar.getInstance();

위와 같은 상태에서 cal 정보를 확인 하면 현재시간 정보가 나옵니다. (이전 포스팅 참조)


여기에 원하는 startDate 정보를 대입해 줍니다. 

cal.set(Calendar.YEAR, Integer.parseInt(startDate.substring(0, 4)));
cal.set(Calendar.MONTH, Integer.parseInt(startDate.substring(4, 6)) - 1);
cal.set(Calendar.DATE, Integer.parseInt(startDate.substring(6, 8)));

cal.set(Calendar.HOUR, Integer.parseInt(startDate.substring(8, 10)));
cal.set(Calendar.MINUTE, Integer.parseInt(startDate.substring(10, 12)));
cal.set(Calendar.SECOND, Integer.parseInt(startDate.substring(12, 14)));

각각의 Calendar 객체 상수값에 대입하는데요. 여기서 한가지 주의 할 점은 Calendar.MONTH 에는 5 가 그대로 입력 되면 안된다는 것입니다. Calendar.MONTH 값이 5일 경우 이는 6월을 의미 하므로 -1 을 한 값을 입력해 주어야 합니다. (이전 포스팅 참조)


이제 cal 에는 현재 날짜 정보를 대신하여 2018년 5월 5일 08시 30분 00초 라는 정보가 셋팅 되었습니다. 

확인은 아래와 같이 해보겠습니다. 

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);

dayOfWeek 값을 별도 입력 하지 않아도 2018년 5월 5일 날짜 정보를 조회하여 요일 정보를 가져 옵니다. 

위 코드를 실행 하면 아래와 같은 결과 값을 리턴합니다. 


2018.5.5(토) 8:30:0


2018년 5월 5일이 토요일이네요 ^^


String startDate = "20180319083000";

날짜를 2018년 3월 19일로 설정해봤습니다. 

위 코드를 그대로 실행 시키면 아래와 같은 결과 값을 리턴합니다. 


2018.3.19(월) 8:30:0


2018년 3월 19일이 월요일이 맞습니다. 잘 동작하네요 ^^


이번 예제와 같이 날짜정보를 String 형으로 제공 하는 경우는 보통 API 호출 또는 전문 호출등을 통해 특정 날짜 정보를 가져 올 경우 형식은 정해져 있으나 (ex. yyyyMMddHHmmss) 어떤 값이 올지 모를 경우에 많이 사용합니다. 


만약 정확한 날짜 정보를 알고 있다면 아래와 같이 직접 입력 하는 방법도 사용 가능합니다. 

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

cal.set(Calendar.HOUR, 8);
cal.set(Calendar.MINUTE, 30);
cal.set(Calendar.SECOND, 0);

처음 방식과 다르게 Calendar.MONTH 에 Calendar.MAY 라는 값을 셋팅 했습니다. 5월이라는 상수 값을 그대로 입력 했으므로 처음과 달리 -1 을 하거나 할 필요가 없습니다. 


물론 결과는 위와 동일 합니다 :)



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

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

감사합니다 :D




블로그 이미지

쉬운코딩이최고

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

,



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


이번에는 자바 Calendar 클래스를 이용하여 오늘 날짜, 요일 및 시간을 구하는 방법에 대해 알아 보겠습니다. 



import java.util.Calendar;
Calendar cal = Calendar.getInstance();
System.out.println(cal);

위와 같이 Calendar 객체의 getInstance() 만 해도 아래와 같이 현재 날짜 정보를 가져 올 수 있습니다. 


java.util.GregorianCalendar[time=1514906028783,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Seoul",offset=32400000,dstSavings=0,useDaylight=false,transitions=22,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2018,MONTH=0,WEEK_OF_YEAR=1,WEEK_OF_MONTH=1,DAY_OF_MONTH=3,DAY_OF_YEAR=3,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=13,SECOND=48,MILLISECOND=783,ZONE_OFFSET=32400000,DST_OFFSET=0]


위 결과 중 우리가 일반적으로 필요로 하는 부분을 붉은 색으로 표기 했습니다. 

key = value 조합으로 나오는 것을 확인하실수 있습니다. 


여기서 key 로 나오는 값이 우리가 Calendar 객체에서 가져올 상수 값입니다. 

즉, 아래와 같이 사용 가능합니다. 


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);

Calender.MONTH 값은 0 ~ 11 까지 존재 하며 각각의 값이 1월 부터 12월을 의미 합니다. 즉, 현재 월을 구하기 위해서는 해당 값에 +1 을 해야 합니다. 


Calendar.DAY_OF_WEEK 는 요일을 의미하며 1 ~ 7 까지의 값을 리턴하며 각각은 일, 월 ~ 금, 토 요일을 의미 합니다. 

이는 아래와 같이 한글 요일값으로 변경 가능합니다. 물론 영문 요일값으로 변경하셔도 됩니다. 

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+"\n월: "+month+"\n일: "+
date+"\n요일: "+dayOfWeek+"("+korDayOfWeek+")"+
"\n시간 : "+hour+"\n분: "+minute+"\n초: "+second);

년도: 2018

월: 1

일: 3

요일: 4(수)

시간 : 0

분: 13

초: 48


이를 일반적인 시간 표현 방식으로 변경해보겠습니다. 

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

2018.1.3(수) 0:13:48



자바 Calendar 객체를 이용하여 현재 날짜, 요일 및 시간 구하는 방법을 간단히 알아 봤습니다. 

아래는 전체 코드 입니다. 


Calendar cal = Calendar.getInstance();
System.out.println(cal);

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+"\n월: "+month+"\n일: "+
date+"\n요일: "+dayOfWeek+"("+korDayOfWeek+")"+
"\n시간 : "+hour+"\n분: "+minute+"\n초: "+second);

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



Calendar 객체에 대해서는 아래 API 링크 참조 하시면 좀더 많은 정보를 접하실수 있습니다. 

https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html




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

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

감사합니다 :D

 


블로그 이미지

쉬운코딩이최고

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

,