-
자바 예제로 살펴보는 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초로 된다는 점도 알아두자
반응형'Java > 자바의정석' 카테고리의 다른 글
Java Collection이란? (0) 2023.02.27 Stack, Queue 개념 (0) 2023.02.26 자바 예제로 살펴보는 Calendar 여러가지 기능들(1) (0) 2023.02.23 자바 Calendar의 여러가지 기능들 (0) 2023.02.23 Math메서드, Round(), Rint() 비교하기 (0) 2023.02.22