Date, Calendar, Time 패키지

리브리버·2022년 11월 9일
0
post-thumbnail

시간, 날짜 등의 데이터를 얻기 위해 크게 date, calendar, time 세가지로 나뉠 수 있습니다.

하지만 가장 많이 쓰이는 것은 time 패키지로 가장 직관적이고 명확한 데이터를 가져올 수 있습니다.

어떤 이유에서 date, calendar 클래스가 계속 사용되기 어려웠는지를 알아보며 time 패키지에 대해서 자세히 알아보겠습니다.

Date 클래스

최초로 날짜와 시간을 구하기 위한 클래스 Date 클래스

(하지만 Calendar 클래스가 새로 추가 되면서 Date 메소드는 deprecated-사용되지 않는 되어 잘 사용하지 않음)

Date 는 지역화가 이루어져있지 않음

  • Date는 지역화에 대한 부분이 고려되지 않았다.

    • 지역화란, 지역에 따라서 시간, 통화(원, 달러, 엔 등) 언어등에 대하여 고려하는 프로그래밍을 지역화에 맞춘 프로그래밍이라고 합니다.
  • java.util.SimpleDateFormat 클래스를 이용해서 원하는 형태로 출력하는 방법

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

예시 코드

SimpleDateFormat ft =  new SimpleDateFormat ("yyyy.MM.dd 'at' hh:mm:ss a zzz");     
System.out.println(ft.format(date));

// 22.11.09 at 07:29:21 오후 KST

Calendar 클래스

클래스는 Date 클래스와 마찬가지로 날짜와 시간을 다루는 클래스이다

캘린더 클래스는 추상클래스이다.

미완성 클래스, 추상화를 한 클래스

추상화란 - 공통의 속성이나 기능을 묶어 이름을 붙이는 것

추상메서드에 내용은 아래 정리한 부분을 참고 부탁드립니다

추상메서드

추상클래스는 new 를 사용해서 바로 이용할 수 없음

여기서 Calendar 추상화 클래스를 사용하기 위해 getInstance 메소드를 호출하면 기본적으로 java.util.GregorianCalendar 인스턴스를 만들어서리턴한다.

하지만 나중에 다른 새로운 형식의 표준달력이 필요할 경우 해당 형식의 표준달력으로 인스턴스를 만들어 리턴하게 하면 사용할 수 있다.

이것이 Calendar 추상화 클래스의 장점이다.

즉 Calendar 의 역할을 할 수 있도록 추상화를 해놓은 것이라 할 수 있다.

아래는 Calendar 의 사용 예시입니다.

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); // add메소드를 통해 Calendar 객체를 5시간 후로 구할 수 있다.

현재 calendar에 시간을 5시간 더하는 방법. 5를 -5로 수정하면 5시가 전을 구할 수 있게 됩니다.

package programmers.intermediate;

import java.util.Calendar;

public class CalendarExam {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        int yyyy = cal.get(Calendar.YEAR);
        int month = cal.get(Calendar.MONTH) + 1;
        int date = cal.get(Calendar.DATE);
        int hour = cal.get(Calendar.HOUR_OF_DAY);
        int minute = cal.get(Calendar.MINUTE);

        /**
         * 만약 100일 후의 시간과 날짜를 구하고 싶다면?
         */

        String s = yyyy+"년"+month+"월"+date+"일"+hour+"시간"+minute+"분";

        cal.add(Calendar.DATE, 100);
        System.out.println(s);
    }
}

java.time 패키지

자바 7이전 까지는 Date와 Calendar 클래스를 이용해서 날짜와 시간 정보를 얻을 수 있었다.

Calendar 클래스는 날짜와 시간 정보를 얻기 에는 충분하지만, 날짜와 시간을 조작하거나 비교하는 기능이 불충분하다.

그래서 자바 8부터 날짜와 시간을 나타내는 여러가지 API를 새롭게 추가했다.

이 API는 java.util 패키지에 없고 별도로 java.time 패키지와 하위 패키로 제공 된다.

날짜와 시간 객체 생성

java.time 패키지에는 다음과 같이 날짜와 시간을 표현하는 5개의 클래스가 있다.
그 중 사용 빈도가 높은 3가지 클래스(LocalDate, LocalTime, LocalDateTime)를 살펴보겠습니다.

LocalDate
로컬 날짜 클래스로 날짜 정보만을 저장

두가지 정적 메소드로 얻는다

now() => 컴퓨터의 현재 날짜 정보를 저장한 LocalDate 객체를 리턴

of() => 매개값으로 주어진 날짜 정보를 저장한 LocalDate 객체를 리턴

LocalDate currDate = LocalDate.now();
LocalDate targetDate = LocalDate.of(int year, int month, int dayOfMonth);
// 2022-11-09

LocalTime
로컬 시간 클래스로 시간 정보만을 저장,

now() => 컴퓨터의 현재 날짜 정보를 저장한 LocalTime 객체를 리턴

of() => 매개값으로 주어진 날짜 정보를 저장한 LocalTime 객체를 리턴

LocalTime currTime = LocalTime.now();
LocalTime targetTime = LocalTime.of(int hour, int minute, int second,int nanoOfSecond)
// 19:51:05.839524800   포맷을 통해 수정할 수 있습니다.

LocalDateTime
LocalDated와 LocatTime을 결합한 클래스,

날짜와 시간정보 모두 저장

now() => 컴퓨터의 현재 날짜 정보를 저장한 LocalDateTime 객체를 리턴

of() => 매개값으로 주어진 날짜 정보를 저장한 LocalDateTime 객체를 리턴

LocalDateTime currDateTime = LocalDateTime.now();
LocalDateTime targetTime = LocalDateTime.of(int year, int month, int dayOfMonth, int hour, int minutem int second, int nanoOfsecond);
// 2022-11-09T19:51:59.157015600

날짜와 시간에 대한 정보 얻기

LocalDate와 LocalTime 은 프로그램에서 날짜와 시간정보를 이용할 수 있도록 다음과 같은 메소드 제공

참고자료 - time패키지

0개의 댓글