Calendar 클래스로 두 시간 사이를 계산할 수 있다. 날짜도 계산할 수 있지만 기본적으로 단위변환을 직접해줘야 한다.

 

앞서 밀리세컨드(1000분의 1초)로 받은 숫자를 가지고 날짜를 연산할 수 있었다. 두 시간 사이가 얼마나 되는지도 같은 방식으로 구할 수 있다.

 

우선 두 개의 Calendar 인스턴스가 필요하다. 두개의 시간이 바로 두 개의 객체이다. 자바에서는 사물뿐 아니라 시간이라는 개념도 클래스로 사용할 수 있다.

 

여러가지 방법으로 시간을 설정할 수 있다. 예제에서는 한번에 설정하는 방식을 선택했다. set 메소드는 년,월,일,시,분,초 의 순서로 매개변수가 들어간다. 날짜는 동일하게 2020년 1월 1일로 맞췄다. 여기서 월이 0인 것을 주의한다. Calendar 클래스는 월이 0부터 시작한다. 

 

두개의 시간을 get 메소드로 JLabel에 표시한다. 이 예제에서는 좀 번거러워도 스윙을 사용한다. System.out.println 이 빠른 실행결과는 좋지만 아무래도 질리기 쉽상이다.

 

* 두 시간을 연산 (시간 사이의 거리)

두 시간은 거리는 역시 밀리세컨드로 계산한다. 1,000으로 나누면 초가 된다.

 

앞쪽에 TIME_UNIT 상수는 시간, 분, 초를 계산하기 위해 만들었다. for 루프문의 알고리즘으로 동작한다.

 

A와 B 시간의 차이는 47,690초이고 3,600초로 나누면 시간이 나온다. 그리고 나머지 890초를 60초로 나눠서 분을 구하고, 나머지 50초가 나온다. 아래와 같은 연산과정이 담겨있다. dif1=0 까지 보이지 않더라도 실행이 된다.

 

 

시간은 중요하므로 프로그램에서도 시간을 잘 다룰 수 있어야 한다. (너무 클리셰이한가 ㅋ)

 

package com.kay.inter;

import java.awt.Font;
import java.util.Calendar;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class CalendarEX3 extends JFrame{
	Font f1;
	
	CalendarEX3(){
		
		final int[] TIME_UNIT = {3600,60,1};
		final String[] TIME_UNIT_NAME = {"시간 ","분 ","초"};
		
		f1 = new Font("배달의민족 도현",Font.PLAIN,30);
		
		// today
		Calendar date1 = Calendar.getInstance();
		date1.set(2020, 0, 1, 10, 20, 30);
		
		// that day
		Calendar date2 = Calendar.getInstance();
		date2.set(2020, 0, 1, 23, 35, 20);
		
		
		String str1 = "시간 1: " + date1.get(Calendar.HOUR_OF_DAY) + "시 " + date1.get(Calendar.MINUTE) + "분 " +
				date1.get(Calendar.SECOND) + "초 ";
		
		String str2 = "시간 2: " + date2.get(Calendar.HOUR_OF_DAY) + "시 " + date2.get(Calendar.MINUTE) + "분 " +
				date2.get(Calendar.SECOND) + "초 ";
		
		
		long dif1 = (date2.getTimeInMillis() - date1.getTimeInMillis())/1000;
		
		String tmp ="시간 차이 : ";
		
		for (int i=0; i<TIME_UNIT.length; i++) {
			tmp += dif1/TIME_UNIT[i] + TIME_UNIT_NAME[i];
			dif1 %= TIME_UNIT[i];
		}
		
	
		JLabel lb1 = new JLabel(tmp);
		lb1.setBounds(50, 200, 600, 40);
		lb1.setFont(f1);
		
		JLabel lb2 = new JLabel(str1);
		lb2.setBounds(50, 100, 600, 40);
		lb2.setFont(f1);
		
		JLabel lb3 = new JLabel(str2);
		lb3.setBounds(50, 150, 600, 40);
		lb3.setFont(f1);
		
		
		// JFrame
		add(lb1);add(lb2);add(lb3);
		setTitle("Calendar Example");
		setSize(700,500);
		setLayout(null);
		setVisible(true);
	}

	public static void main(String[] args) {
		
		new CalendarEX3();
	}
}

 

 

공유하기

facebook twitter kakaoTalk kakaostory naver band