[Java] Date, Calendar 클래스와 java.time 패키지

재영양·2022년 11월 9일
0

Study

목록 보기
10/14

Date 클래스


  • 날짜와 시간을 구하기 위한 클래스
  • 대부분의 메서드가 deprecated 로 처리되어 있으므로 현재 사용되지 않지만, 기존에 제공되는 API 들의 대다수가 Date 타입을 사용하고 있음
    • Date는 지역화에 대한 부분이 고려되지 않았기 때문
      • 지역화란, 지역에 따라서 시간, 통화(원, 달러, 엔 등) 언어등에 대하여 고려하는 프로그래밍을 지역화에 맞춘 프로그래밍

기본 생성자를 이용한 Date클래스 생성

  • yyyy는 년, MM은 월, dd는 일을 표현한다.
  • hh는 시간, mm은 분, ss는 초를 표현하며 a는 오전/오후 를 표현한다.
  • zzz는 TimeZone을 나타낸다.
    • 한국의 경우 한국표준시 KST가 TimeZone에 해당하는 값
Date date = new Date();

// toString() 메소드를 이용하여 현재 시간을 문자열로 구한다.
System.out.println(date.toString());

// java.util.SimpleDateFormat 클래스로 원하는 형태로 출력하기
SimpleDateFormat ft =  new SimpleDateFormat ("yyyy.MM.dd 'at' hh:mm:ss a zzz");     
System.out.println(ft.format(date));
출력 > Wed Nov 09 15:24:52 KST 2022

Calendar 클래스


  • 인터페이스로 정의된 추상 클래스
  • Calendar클래스에 대한 인스턴스를 생성하려면 Calendar가 가지고 있는 클래스 메소드 getInstnace()를 사용해야 한다.
  • getInstance()메소드를 호출하면 내부적으로 java.util.GregorianCalendar 인스턴스를 만들어서 리턴한다.
  • GregorianCalendar는 Calendar의 자식 클래스이다. (음력, 유대력 등등 다양한 달력이 존재)
  • Calendar는 현재 날짜와 시간에 대한 정보를 가진다.
Calendar cal = Calendar.getInstance();

int yyyy = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1; // 월은 0부터 시작
int date = cal.get(Calendar.DATE);
int hour = cal.get(Calendar.HOUR_OF_DAY);
int minute = cal.get(Calendar.MINUTE);

cal.add(Calendar.HOUR, 5); // 5시간 뒤
cal.add(Calnedar.MONTH, -1); // 1달 전

Calendar 클래스의 주요 상수

주요 상수설명
Calendar.YEAR현재 년도
Calendar.MONTH현재 월 (1월: 0)
Calendar.DATE현재 월의 날짜
Calendar.WEEK_OF_YEAR현재 년도의 몇째 주
Calendar.WEEK_OF_MONTH현재 월의 몇째 주
Calendar.DAY_OF_YEAR현재 년도의 날짜
Calendar.DAY_OF_MONTH현재 월의 날짜
Calendar.DAY_OF_WEEK현재 요일(일요일:1 ,토요일: 7)
Calendar.HOUR현재 시간 (12시간제)
HOUR_OF_DAY현재 시간 (24시간제)
Calendar.MINUTE현재 분
Calendar.SECOND현재 초

java.time 패키지


  • LocalDate, LocalTime, LocalDateTime이 있다.
  • Local이라는 단어에서 알 수 있듯이, 지역화 되지 않은 제한적인 지역의 날짜를 가지는 클래스이다.

LocalDate - 날짜 클래스

LocalDate curDate = LocalDate.now(); // 2022-11-09
LocalDate targetDate = LocalDate.of(2022, 11, 09); // 2022-11-09
  • Calendar에서와 다르게 month의 상수값은 우리가 사용하는 달력과 일치한다.

LocalTime - 시간 클래스

LocalTime curTime = LocalTime.now(); // 22:09.02.831
LocalTime targetTime = LocalTime.of(22, 8, 30); // 22:08:30 인자를 4개까지 쓸 수 있는데 nano 시간
  • 시간클래스이고, 매우 직관적이다.

LocalDateTime - 날짜 + 시간 클래스

LocalDateTime curDateTime = LocalDateTime.now();

LocalDate curDate = LocalDate.now();
LocalTime curTime = LocalTime.now();
LocalDateTime targetDateTime = LocalDateTime.of(curDate, curTime);

System.out.println(curDateTime); // 2022-11-09T16:01:28.862321
System.out.println(targetDateTime); // 2022-11-09T16:01:28.862321

새로운 API의 핵심 클래스는 오브젝트를 생성하기 위해 다양한 factory 메서드를 사용한다.
오브젝트 자기 자신의 특정 요소를 가지고 오브젝트를 생성할 경우 of 메서드를 호출하면 되고, 다른 타입으로 변경할 경우에는 from 메서드를 호출하면 된다.

  • LocalDateTime 클래스를 이용해서 현재 시간 time객체 만드는 방법
LocalDateTime timePoint = LocalDateTime.now(); // 현재의 날짜와 시간

// // 원하는 시간으로 time객체 생성하기
// 2012년 12월 12일의 시간에 대한 정보를 가지는 LocalDate객체
LocalDate ld1 = LocalDate.of(2012, Month.DECEMBER, 12); 
// 17시 18분에 대한 LocalTime객체
LocalTime lt1 = LocalTime.of(17, 18); // 17:18 
// 10시 15분 30초라는 문자열에 대한 LocalTime객체
LocalTime lt2 = LocalTime.parse("10:15:30"); 
    
// // 현재와 날짜와 시간정보를 getter메소드를 이용하여 구하기
LocalDate theDate = timePoint.toLocalDate();
Month month = timePoint.getMonth();
int day = timePoint.getDayOfMonth();
int hour = timePoint.getHour();
int minute = timePoint.getMinute();
int second = timePoint.getSecond();

System.out.println(month.getValue() + "/" + day + "  " + hour + ":" + minute + ":" + second);

0개의 댓글