자바 1.0에서 java.util.Date 클래스로 날짜와 시간 관련 기능을 제공하였으나

1900년 기준으로 하는 오프셋, 0으로 시작하는 달 인덱스 등 애매한 설계로

유용성이 떨어진다는 이야기가 많았고, 이를 보완할 수 있게 자바 1.1에서 Calandar 클래스가

추가되었으나 Daeformat 같은 일부 기능 들은 Date 클래스에서만 동작한다던 지

DateFormat이 스레드에 안전하지 않다 던지 여러 가지 문제점이 존재하였습니다.

자바 9에서 이를 보완 가능한 java.util.time 패키지가 추가되었고 이에 대해 알아보겠습니다.

 

LocalDate

시간을 제외한 날짜를 표현하는 불변 객체입니다.

어떤 시간대 정보도 포함하지 않습니다.

정적 팩토리 메서드 of로 LocalDate 인스턴스 생성 가능하고

연도, 달, 요일 등을 반환하는 메서드 제공합니다.

예제로 사용 예시를 확인해보겠습니다.

메서드 이름도 굉장히 직관적이고 이전에 비해 사용이 매우 쉬운 편입니다.

import java.time.*;

public class Main {
	public static void main(String[] args) {
		LocalDate date = LocalDate.of(2022, 10, 22);
		LocalDate parseDate = LocalDate.parse("2022-10-22");
		LocalDate today = LocalDate.now();
		int year = date.getYear();
		Month month = date.getMonth();
		DayOfWeek dow = date.getDayOfWeek();
		int len = date.lengthOfMonth();
		boolean leap = date.isLeapYear();
        
        System.out.println(date);
		System.out.println(parseDate);
		System.out.println(today);
		System.out.println(year);
		System.out.println(month);
		System.out.println(dow);
		System.out.println(len);
		System.out.println(leap);
    }
}

출력 값

2022-10-22
2022-10-22
2022-11-28
2022
OCTOBER
SATURDAY
31
false

 

LocalTime

시간 표현이 가능한 객체입니다.

LocalDate 객체와 사용 방법이 유사합니다.

다음 예제를 통해 사용 예시를 확인해보겠습니다.

import java.time.*;

public class Main {
	public static void main(String[] args) {
		LocalTime time = LocalTime.of(15, 56, 59);
        // 포맷이 틀릴 경우 DateTimeParseException 발생.
		LocalTime parseTime = LocalTime.parse("13:56:59"); 
        
		
		int hour = time.getHour();
		int minute = time.getMinute();
		int sec = time.getSecond();
		
		System.out.println(time);
		System.out.println(parseTime);
		
		System.out.println(hour);
		System.out.println(minute);
		System.out.println(sec);	
    }
}

출력 값

15:56:59
13:56:59
15
56
59

 

LocalDateTime

LocalDate와 LocalTime을 갖는 복합 클래스입니다.

날짜와 시간을 모두 표현 가능합니다.

다음 예제를 통해 사용 예시를 확인해보겠습니다.

 

import java.time.*;

public class Main {
	public static void main(String[] args) {
		LocalDateTime dt1 = LocalDateTime.of(2022, Month.DECEMBER, 22, 13, 56, 59);
		LocalDateTime dt2 = LocalDateTime.of(date, time);
		LocalDateTime dt3 = date.atTime(13, 45, 20);
		LocalDateTime dt4 = date.atTime(time);
		LocalDateTime dt5 = time.atDate(date);
		
		LocalDate ldate1 = dt1.toLocalDate();
		LocalTime time1 = dt1.toLocalTime();
		
		System.out.println(dt1);
		System.out.println(dt2);
		System.out.println(dt3);
		System.out.println(dt4);
		System.out.println(dt5);
		System.out.println(ldate1);
		System.out.println(time1);
    }
}

출력 값

2022-12-22T13:56:59
2022-10-22T15:56:59
2022-10-22T13:45:20
2022-10-22T15:56:59
2022-10-22T15:56:59
2022-12-22
13:56:59

 

 

'Java > Time' 카테고리의 다른 글

ZoneId, ZoneDateTime, ZoneOffset  (0) 2022.11.28
TemporalAdjusters와 DateTimeFormatter  (0) 2022.11.28
Instant, Duration, Period  (0) 2022.11.28

+ Recent posts