[Java] Date 클래스, Calendar 클래스

Bam·2024년 3월 11일
0

Java

목록 보기
55/98
post-thumbnail

이번에 소개할 클래스는 시간과 날짜를 다루는 Date 클래스와 Calendar 클래스입니다. 둘 다 내용이 짧기도 하고 시간과 날짜는 묶어서 설명되는 경우가 많길래 하나의 포스트로 묶었습니다.


Date 클래스

Date 클래스java.util 패키지에 속한 날짜 정보 취득 클래스입니다.

public class Main {
    public static void main(String[] args) {
        Date date = new Date();

        System.out.println(date);
    }
}

위 사진처럼 Date 객체를 생성하는 순간 시스템의 날짜 정보를 읽어서 객체로 만들어집니다.

공식 문서를 보시면 아시겠지만 대부분이 Deprecated된 기능들이라서 단순히 날짜를 취득해 객체 간 전달하는 정도로만 사용됩니다. 그래서 날짜와 시간 정보를 얻고자한다면 Calendar 클래스를 사용하게 됩니다.


Calendar 클래스

Calendar 클래스는 날짜와 시간 정보를 취득하는 클래스입니다. 이 클래스는 달력을 추상화한 추상 클래스입니다.

음력 등의 특수한 달력 체계를 사용하고자 할 경우 상속을 통해서 구현합니다. 그러나 일반적인 양력 개념을 사용하는 경우는 따로 클래스 생성 없이 getInstance()라는 정적 메소드를 통해 컴퓨터의 시스템 시간을 기준으로 Calendar 객체를 하나 생성할 수 있습니다. 이 객체를 통해 여러가지 시간 정보에 접근할 수 있게 됩니다.

Calendar 변수명 = Calendar.getInstance();

Calendar 객체에 get() 메소드와 객체 정보를 입력하면 원하는 시간/날짜를 취득할 수 있습니다.

public class Main {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();

        System.out.println(calendar.get(Calendar.YEAR));
        System.out.println(calendar.get(Calendar.MONTH) + 1);
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
        System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
        System.out.println(calendar.get(Calendar.HOUR));
        System.out.println(calendar.get(Calendar.MINUTE));
        System.out.println(calendar.get(Calendar.SECOND));
    }
}

2024년 3월 11일 월(2)과 시간이 제대로 출력됐죠?

여기서 주목해야할 필드가 MONTH, DAY_OF_WEEK(요일)입니다.

MONTH는 실제로는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11과 같은 값의 형태로 저장되어 있습니다. 즉, 1월은 0이라는 것이죠. 그래서 우리가 사용하는 월과 일치시키려면 반드시 +1을 해주어서 사용해야 월과 값이 일치하게 됩니다.

요일을 의미하는 DAY_OF_WEEK일, 월, 화, 수, 목, 금, 토 순서로 일요일 부터 시작합니다. 그리고 실제 저장은 1, 2, 3, 4, 5, 6, 7과 같은 값의 형태로 저장되어 있습니다. 월과 다르게 0이 아닌 1부터 시작하고, 1이 일요일이라는 것을 명심해주어야합니다.


추가, 시간 조작 클래스 LocalDateTime

Calendar 클래스는 시간에 대한 정보를 얻을 뿐 시간에 대한 조작은 불가능합니다. 따라서 날짜/시간에 대한 조작을 하고 싶다면 LocalDateTime 클래스를 사용해야합니다. LocalDateTime 클래스java.time 패키지에 위치해있습니다.

LocalDateTimenow()라는 정적 메소드를 통해 현재 날짜와 시간을 취득합니다.

LocalDateTime 변수명 = LocalDateTime.now();

기본적으로 덧셈 뺼셈 연산을 할 수 있는데 덧셈은 plusXxxxs(), 뺄셈은 minusXxxxs()형태로 메소드가 구성되어 있습니다. (예. 년도를 더하고 뺀다면 plusYears(), minusYears()) 이때 인수로는 long타입 정수를 전달합니다.

다음 코드는 현재 시간에서 10년전으로 돌아간 시간을 출력하는 코드입니다.

public class Main {
    public static void main(String[] args) {
        LocalDateTime ldt = LocalDateTime.now();

        System.out.println(ldt.minusYears(10));	//현재 시간 정보 중 년도를 10 빼기
    }
}

0개의 댓글