ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바 예제로 살펴보는 Calendar 여러가지 기능들(2)
    Java/자바의정석 2023. 2. 23. 23:19
    반응형

    이전 게시글들에서 Calendar에 관해 공부를 하였고 이번에는 Time에 관한 기능들을 실습해보자!

    package JavaChap10;
    
    import java.util.*;
    
    class Ex10_3 {
        public static void main(String[] args) {
            final int[] TIME_UNIT = {3600, 60, 1}; // 큰 단위를 앞에 놓는다.
            final String[] TIME_UNIT_NAME = {"시간 ", "분 ", "초 "};
    
            Calendar time1 = Calendar.getInstance();
            Calendar time2 = Calendar.getInstance();
    
            time1.set(Calendar.HOUR_OF_DAY, 10); // time1을 10시 20분 30초로 설정
            time1.set(Calendar.MINUTE, 20);
            time1.set(Calendar.SECOND, 30);
    
            time2.set(Calendar.HOUR_OF_DAY, 20); // time2을 20시 30분 10초로 설정
            time2.set(Calendar.MINUTE, 30);
            time2.set(Calendar.SECOND, 10);
    
            System.out.println("time1 :"+time1.get(Calendar.HOUR_OF_DAY)+"시 "
                    +time1.get(Calendar.MINUTE)+"분 "+time1.get(Calendar.SECOND)+"초");
            System.out.println("time2 :"+time2.get(Calendar.HOUR_OF_DAY)+"시 "
                    +time2.get(Calendar.MINUTE)+"분 "+time2.get(Calendar.SECOND)+"초");
    
            //시간차이를 구할때도 초단위로 바꾸고 난 뒤 뺄셈
            long difference =
                    Math.abs(time2.getTimeInMillis() - time1.getTimeInMillis())/1000;
            System.out.println("time1과 time2의 차이는 "+ difference +"초 입니다.");
    
            String tmp = "";
            for(int i=0; i < TIME_UNIT.length;i++) {
                tmp += difference/TIME_UNIT[i] + TIME_UNIT_NAME[i];
                difference %= TIME_UNIT[i];
            }
            System.out.println("시분초로 변환하면 " + tmp + "입니다.");
        }
    }

    ===================실행결과================

    time1 :10시 20분 30초
    time2 :20시 30분 10초
    time1과 time2의 차이는 36580초 입니다.
    시분초로 변환하면 10시간 9분 40초 입니다.


    final int[] TIME_UNIT = {3600, 60, 1}; // 큰 단위를 앞에 놓는다.
    final String[] TIME_UNIT_NAME = {"시간 ", "분 ", "초 "};
    
    Calendar time1 = Calendar.getInstance();
    Calendar time2 = Calendar.getInstance();

     

    우선 TIME_UNIT과 TIME_UNIT_NAME에 위와같이 설정해준 후

    Calendar를 사용하기위해 getInstance()를 통해 값을 불러오도록 설정해준다.

    time1.set(Calendar.HOUR_OF_DAY, 10); 
    time1.set(Calendar.MINUTE, 20);
    time1.set(Calendar.SECOND, 30);
    
    time2.set(Calendar.HOUR_OF_DAY, 20);
    time2.set(Calendar.MINUTE, 30);
    time2.set(Calendar.SECOND, 10);

     

    time1과 time2를 각각 10시 20분 30초 / 20시 30분 10초 와 같이 설정한다.

    System.out.println("time1 :"+time1.get(Calendar.HOUR_OF_DAY)+"시 "
            +time1.get(Calendar.MINUTE)+"분 "+time1.get(Calendar.SECOND)+"초");
    System.out.println("time2 :"+time2.get(Calendar.HOUR_OF_DAY)+"시 "
            +time2.get(Calendar.MINUTE)+"분 "+time2.get(Calendar.SECOND)+"초");

     

     

    설정한 값들을 찍어본다면 

    time1 :10시 20분 30초
    time2 :20시 30분 10초

    와 같이 출력이되는것을 확일할 수 있다.

     

    long difference =
            Math.abs(time2.getTimeInMillis() - time1.getTimeInMillis())/1000;
    System.out.println("time1과 time2의 차이는 "+ difference +"초 입니다.");

     

    시간의 경우 시간1-시간2도 날짜와 동일하게 초단위로 변경 후에 뺄셈을 진행해야한다.

     

    String tmp = "";
    for(int i=0; i < TIME_UNIT.length;i++) {
        tmp += difference/TIME_UNIT[i] + TIME_UNIT_NAME[i];
        difference %= TIME_UNIT[i];
    }
    System.out.println("시분초로 변환하면 " + tmp + "입니다.");

    위의 코드는 거스름돈을 구하는 코드와 비슷한 코드이다. 하나씩 풀이를 해보자

    final int[] TIME_UNIT = {3600, 60, 1};
    final String[] TIME_UNIT_NAME = {"시간 ", "분 ", "초 "};

     

    상단에 우리가 선언해둔 배열이 이렇게 존재한다. 

    0번째 인덱스부터 큰단위로 순서대로 설정해 준 뒤 for문을 수행한다.

    tmp = 36580 / 3600 + 시간
    tmp = 10시간
    difference = difference % TIME_UNIT[i];
    difference = 36580 % 3600
    difference = 580

     

    맨처음 0번째를 수행하게 된다면 이와같이 수행되게 되고

    tmp = 580 / 60 + 분
    tmp = 9 분
    difference = 580 / 60
    difference = 40
    
    tmp = 40초

    for문을 돌며 차례차례 값이 나누어지게 된다.

    겨로가값으로 우리는 밀리세컨드의 초를 시간, 분, 초 단위로 꺼내어올 수 있다.

    시분초로 변환하면 10시간 9분 40초 입니다.

     

    clear()를 하게 된다면 객체의 모든 필드가 초기화 된다 

    초기화 된다면 1970년 1월 1일 00:00:00초로 된다는 점도 알아두자

    반응형

    댓글

Designed by Tistory.