organize/자바

Java 20

001cloudid 2024. 5. 5. 17:56
728x90

날짜와 시간

  • java.util.Date : 날짜와 시간을 다룰 목적으로 만들어진 클래스
  • java.util.Calendar : Date 클래스를 개선한 클래스. 많은 단점이 있으나 현재까지도 많이 사용됨
  • java.time 패키지 : Date와 Calendar의 단점을 개선한 새로운 클래스들을 제공
    ※Date와 Calendar 클래스는 날짜와 시간을 함께 다룬다는 단점이 있으나, time 패키지에서는 날짜는 LocalDate, 시간은 LocalTime, 날짜와 시간은 LocalDateTime으로 사용

Calendar 클래스

추상 클래스이므로 getInstance()를 통해 구현된 객체를 얻어야함

		Calendar calendar = new Calendar(); //에러 발생. 추상 클래스는 인스턴스를 생성할 수 없음
		Calendar calendar = Calendar.getInstance(); //getInstance()메서드는 Calendar클래스를 구현한 클래스의 인스턴스를 반환

 

		Calendar calendar = Calendar.getInstance();  //현재 날짜와 시간으로 세팅

		//get()으로 날짜와 시간 필드 가져오기 - int get(int field)
		int thisYear = calendar.get(Calendar.YEAR); //올해가 몇 년도인지
		int lastDayOfMonth = calendar.getActualMaximum(Calendar.DATE); //이 달의 마지막 날
		System.out.println(thisYear);
		System.out.println(lastDayOfMonth);

 

Calendar에 정의된 필드

날짜

  • YEAR : 년
  • MONTH : 월(0부터시작)
  • WEEK_OF_YEAR : 1월 1일부터 지금까지 몇 번째 주
  • WEEK_OF_MONTH : 그 달의 몇 번째 주
  • DATE : 일
  • DAY_OF_MONTH : 그 달의 몇 번째 일 
  • DAY_OF_YEAR : 그 해의 몇 번째일
  • DAY_OF_WEEK : 요일(1 일요일) 
  • DAY_OF_WEEK_IN_MONTH : 그 달의 몇 번째 요일

시간

  • HOUR : 시간(0~11)
  • HOUR_OF_DAY : 시간(0~23)
  • MINUTE : 분
  • SECOND : 초
  • MULLISECOND : 천 분의 일초
  • ZONE_OFFSET : GMT 기준 시차(천 분의 일초 단위)
  • AM_PM : 오전/오후
package chapter10;

import java.util.Calendar;

public class Study01Ex2 {
	
	public static void main(String[] args) {

		Calendar today = Calendar.getInstance(); //기본적으로 현재 날짜와 시간으로 설정
		System.out.println("올해의 년도(YEAR) : " + today.get(Calendar.YEAR));
		System.out.println("지금 월(MONTH) : " + today.get(Calendar.MONTH)); //(0~11)
		System.out.println("올해의 몇 번째 주(WEEK_OF_YEAR) : " + today.get(Calendar.WEEK_OF_YEAR));
		System.out.println("지금 월의 몇 째 주(WEEK_OF_MONTH) : " + today.get(Calendar.WEEK_OF_MONTH));
		
		//DATE와 DAY_OF_MONTH는 같음
		System.out.println("이 달의 일(DATE) : " + today.get(Calendar.DATE));
		System.out.println("이 달의 일(DAY_OF_MONTH) : " + today.get(Calendar.DAY_OF_MONTH));
		System.out.println("이 해의 몇 일(DAY_OF_YEAR) : " + today.get(today.DAY_OF_YEAR));
		System.out.println("오늘 요일(DAY_OF_WEEK) : " + today.get(Calendar.DAY_OF_WEEK)); //(1~7, 1 일요일)
		System.out.println("이 달의 몇 번째 요일(DAY_OF_WEEK_IN_MONTH) : " + today.get(Calendar.DAY_OF_WEEK_IN_MONTH));
		System.out.println("오전_오후(AM_PM) : " + today.get(Calendar.AM_PM) ); //(0 오전, 1 오후)
		System.out.println("시간(HOUR) : " + today.get(Calendar.HOUR)); //(0~11)
		System.out.println("시간(HOUR_OF_DAY) : " + today.get(Calendar.HOUR_OF_DAY)); //(0~23)
		System.out.println("분(MINUTE) : " + today.get(Calendar.MINUTE));
		System.out.println("초(SECOND) : " + today.get(Calendar.SECOND));
		System.out.println("1/1000(MILLISECOND) : " + today.get(Calendar.MILLISECOND)); //(0~999)
		System.out.println("TimeZone(ZONE_OFFSET) : " + today.get(Calendar.ZONE_OFFSET/3600000)); //-12~+12. 천분의 1초를 시간으로 표시하기 위해 3600000으로 나눔.(1시간 = 60*60초)
		System.out.println("이 달의 마지막 날(getActualMaximum(Calendar.DATE)) : " + today.getActualMaximum(Calendar.DATE));
		
	}

}

 

set()으로 날짜와 시간 지정

날짜

		//주의사항 날짜 지정하는 방법에서 월은 0부터 시작
		Calendar c1 = Calendar.getInstance();
		c1.set(2024, 4, 5); //=> 2024년 5월 5일
		c1.set(Calendar.YEAR, 2024);
		c1.set(Calendar.MONTH, 4); //5월
		c1.set(Calendar.DATE, 5);

 

시간

		//시분초를 설정하는 메서드는 없기 때문에 따로 해줘야함
		Calendar t1 = Calendar.getInstance();
		t1.set(Calendar.HOUR_OF_DAY, 16);
		t1.set(Calendar.MINUTE, 50);
		t1.set(Calendar.SECOND, 20);

 

package chapter10;

import java.util.Calendar;

public class Study02Ex1 {
	
	public static String toString(Calendar date) {
		return date.get(Calendar.YEAR)+"년" + (date.get(Calendar.MONTH)+1) + "월" + date.get(Calendar.DATE) + "일";
	}

	public static void main(String[] args) {

		final String[] DAY_OF_WEEK = {"", "일", "일", "화", "수", "목", "금", "토"}; //요일은 1부터 시작하기 때문에 [0]을 비워둠
		
		Calendar c1 = Calendar.getInstance();
		Calendar c2 = Calendar.getInstance();
		
		//월의 경우 0부터 시작하기 때문에 '현재월 - 1'을 해줘야함
		c1.set(2024, 3, 5); //2024년 4월 5일로 날짜 설정
		//== c1.set(2024, Calendar.MAY, 5);
		System.out.println("c1 " + toString(c1) + DAY_OF_WEEK[c1.get(Calendar.DAY_OF_WEEK)] + "요일");
		System.out.println("c2 " + toString(c2) + DAY_OF_WEEK[c2.get(Calendar.DAY_OF_WEEK)] + "요일");
		
		//두 날짜간의 차이를 얻으려면, getTimeInMillis() 천분의 일초 단위로 변환
		long diff = Math.abs(c1.getTimeInMillis() - c2.getTimeInMillis())/1000;
		System.out.println("c1부터 c2까지 " + diff + "초가 지남");
		System.out.println("일(day)로 계산하면 " + diff/(24*60*60) + "일"); //1일 = 24*60*60
	}

}

 

package chapter10;

import java.util.Calendar;

public class Study02Ex2 {

	public static void main(String[] args) {

		final int[] TIME_UNIT = {3600, 60, 1}; //큰 단위를 앞에 놓음
		final String[] TIME_UNIT_NAME = {"시간", "분", "초"};
		
		Calendar t1 = Calendar.getInstance();
		Calendar t2 = Calendar.getInstance();
		
		//t1을 10시 10분 10초로 설정
		t1.set(Calendar.HOUR_OF_DAY, 10);
		t1.set(Calendar.MINUTE, 10);
		t1.set(Calendar.SECOND, 10);
		
		//t2을 20시 20분 20초로 설정
		t2.set(Calendar.HOUR_OF_DAY, 20);
		t2.set(Calendar.MINUTE, 20);
		t2.set(Calendar.SECOND, 20);
		
		System.out.println("t1 : " + t1.get(Calendar.HOUR_OF_DAY) + "시 " + t1.get(Calendar.MINUTE)+ "분 " + t1.get(Calendar.SECOND) + "초");
		System.out.println("t2 : " + t2.get(Calendar.HOUR_OF_DAY) + "시 " + t2.get(Calendar.MINUTE)+ "분 " + t2.get(Calendar.SECOND) + "초");
		
		long diff = Math.abs(t2.getTimeInMillis() - t1.getTimeInMillis())/1000;
		System.out.println("t1과 t2의 차이는 " + diff + "초");
		
		String temp = "";
		for(int i = 0; i<TIME_UNIT.length;i++) {
			temp += diff/TIME_UNIT[i] + TIME_UNIT_NAME[i];
			diff %= TIME_UNIT[i];
		}
		System.out.println("차이를 시분초로 변환하면 " + temp);
		
		
	}

}

 

clear()는 Calendar 객체의 모든 필드를 초기화

		Calendar dt = Calendar.getInstance();
		System.out.println(new Date(dt.getTimeInMillis()));
		dt.clear();
		System.out.println(new Date(dt.getTimeInMillis()));

 

clear(int field)는 Calendar 객체의 특정 필드를 초기화

728x90

'organize > 자바' 카테고리의 다른 글

Java 22  (0) 2024.05.07
Java 21  (0) 2024.05.06
Java 19  (0) 2024.05.04
Java 18  (0) 2024.05.03
Java 17  (0) 2024.05.02