기존의 Date와 Calendar 클래스의 단점을 보완하여 JDK 1.8부터 java.time 패키지가 추가되었다.
String 클래스와 같이 불변(immutable)한 특징을 갖는다.
핵심 클래스
LocalDate 날짜를 표현하는 클래스.
LocalTime 시간을 표현하는 클래스.
LocalDateTime 날짜와 시간을 표현하는 클래스.
ZonedDateTime 날짜와 시간에 시간대까지 표현하는 클래스.
Period 날짜간의 차이를 표현하기 위한 클래스
Duration 시간의 차이를 표현하기 위한 클래스
객체 생성
LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
LocalDate date1 = LocalDate.of(2015, 11, 23); //2015년 11월 23일
LocalTime time1 = LocalTime.of(18, 55, 33); // 18시 55분 33초
now() 메서드와 of() 메서드를 활용해 객체를 생성한다.
TemporalUnit 날짜와 시간의 단위를 정의한 인터페이스 -> ChronoUnit 으로 구현 (열거형)
TemporalField 년, 월, 일 등 날짜와 시간의 필드를 정의해 놓은 인터페이스 -> ChronoField로 구현 (열거형)
LocalTime now = LocalTime.now();
int min = now.getMinute(); // 현재 시간에서 분만 꺼냄
int min1 = now.get(ChronoField.MINUTE_OF_HOUR); // 위 문장과 동일함.
LocalDate today = LocalDate.now();
LocalDate tomorrow = today.plus(1, ChronoUnit.DAYS); //하루를 더함
LocalDate tomorrow1 = today.plusDays(1); //위 문장과 동일
get() 메서드나 get으로 시작하는 메서드를 통해 값을 얻어낼 수 있다. plus() 메서드, minus() 메서드 혹은 plus나 minus로 시작하는 메서드를 통해 지정된 단위의 값에 연산을 할 수 있다.
// get() plus() 정의
int get(TemporalField field)
LocalDate plus(long amountToAdd, TemporalUnit unit)
with로 시작하는 메서드를 사용해서 지정한 단위의 값을 정할 수 있다.
date = date.withYear(2000); // 연도를 2000년으로
time = time.withHour(12); // 시간을 12시로 변경
변경된 객체를 반환하기 때문에 대입 연산자를 통해 변수에 값을 넣어줘야 한다.
날짜와 시간의 비교
LocalDate와 LocalTime도 compareTo() 메서드가 오버라이딩되어 있어서 비교할 수 있다.
그래도 더 편리하기 비교할 수 있는 메서드가 있다.
// isAfter(), isBefore(), isEqual()
LocalDate today = LocalDate.now();
LocalDate tomorrow = today.plusDays(1);
System.out.println(today.isEqual(tomorrow)); // false
System.out.println(today.isBefore(tomorrow)); // true
System.out.println(today.isAfter(tomorrow)); // false
날짜와 시간의 차이 계산
두 날짜 사이의 차이를 나타내는 Period는 between() 메서드를 통해 얻을 수 있다.
LocalDate date1 = LocalDate.of(2011, 4, 1);
LocalDate date2 = LocalDate.of(2021, 4, 1);
Period pe = Period.between(date1, date2);
date1이 date2보다 날짜 상으로 이전이면 양수로, 이후면 음수로 저장된다.
시간의 차이를 나타내는 Duration도 Period와 같은 방식으로 사용된다.
Period와 Duration에 to로 시작하는 메서드는 지정한 단위로 날짜와 시간을 변경한다.
// Period
Period.toTotalMonths(); // 년월일을 월단위로 변환해서 반환
// Duration
Duration.toDays();
Duration.toHours();
Duration.toMinute();
Duration.toMills();
Duration.toNanos();
// 모두 long 타입으로 반환됨.
'Java' 카테고리의 다른 글
[Java] LinkedList (0) | 2021.05.22 |
---|---|
[Java] ArrayList (0) | 2021.05.21 |
[Java] 형식화 (Format) (0) | 2021.05.19 |
[Java] 날짜와 시간 (Calendar, Date) (0) | 2021.05.18 |
[Java] String 클래스 (0) | 2021.05.10 |