이번에 소개할 클래스는 시간과 날짜를 다루는 Date 클래스와 Calendar 클래스
입니다. 둘 다 내용이 짧기도 하고 시간과 날짜는 묶어서 설명되는 경우가 많길래 하나의 포스트로 묶었습니다.
Date 클래스
는 java.util
패키지에 속한 날짜 정보 취득 클래스입니다.
public class Main {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);
}
}
위 사진처럼 Date 객체를 생성하는 순간 시스템의 날짜 정보를 읽어서 객체로 만들어집니다.
공식 문서를 보시면 아시겠지만 대부분이 Deprecated
된 기능들이라서 단순히 날짜를 취득해 객체 간 전달하는 정도로만 사용됩니다. 그래서 날짜와 시간 정보를 얻고자한다면 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이 일요일이라는 것을 명심해주어야합니다.
Calendar 클래스는 시간에 대한 정보를 얻을 뿐 시간에 대한 조작은 불가능합니다. 따라서 날짜/시간에 대한 조작을 하고 싶다면 LocalDateTime 클래스
를 사용해야합니다. LocalDateTime 클래스
는 java.time
패키지에 위치해있습니다.
LocalDateTime
은 now()
라는 정적 메소드를 통해 현재 날짜와 시간을 취득합니다.
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 빼기
}
}