java.time
Date와 Calendar 클래스를 보완하는 패키지로 불변하는 속성을 지녔다. 때문에 날짜나 시간을 변경하면 항상 새로운 인스턴스가 생성되는 특징을 가졌다.
LocalDate(년/월/일)
날짜 정보를 저장하는 클래스
Calendar클래스는 1월을 0으로, 일요일을 1로 표현했지만,
LocalDate클래스에서는 1월을 1로, 월요일을 1로 표현한다.
생성방법
LocalDate ld = LocalDate.now();
LocalDate ld2 = LocalDate.of(int year, int month, int dayOfMonth);
일반적인 객체 생성 방법과 달리 now() 메서드와, of() 메서드를 사용해 객체 생성할 수 있다.
LocalTime
시간 정보를 저장하는 클래스
생성방법
LocalTime lt = LocalTime.now();
LocalTime lt2 = LocalTime.of(int hour, int minute, int second, int nanoOfSecond);
LocalDateTime
날짜 정보와 시간 정보를 한 번에 저장하기 위해 LocalDate클래스와 LocalTime클래스를 합친 클래스
생성방법
LocalDateTime ldt = LocalDateTime.now();
LocalDateTime ldt2 = LocalDateTime.of(년, 월, 일, 시, 분, 초, 나노초);
LocalDate, LocalTime, LocalDateTime 클래스 모두 동일한 방법으로 객체 생성할 수 있다.
ZonedDateTime
ISO-8601 달력 시스템에서 정의하는 TimeZone에 따라 날짜와 시간을 저장하는 클래스
생성방법
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("UTC")); (ZoneId에서 I는 i임)
Instant
1970년 1월 1일부터 현재까지의 시간(초, 밀리초)을 세는 클래스다.
생성방법
instant i = Instant.now();
생성 메서드
클래스 | 반환타입 | 메서드 | 설명 |
공통 | Class | now() | 현재 날짜/시간을 지정 |
of() | 특정 날짜/시간을 지정/set()과 동일한 사용 방법 |
of()
: of() 메서드는 다양한 매개변수로 오버로딩 되어 있어 순서만 지킨다면 문제없이 작동한다.
순서
1. 년 (year)
2. 월 (month)
3. 일 (dayOfMonth)
4. 시 (hour)
5. 분 (minute)
6. 초 (second)
7. 나노초 (nanoOfSecond) (선택적)
정보 값을 읽어오는 메서드
클래스 | 반환타입 | 메서드 | 설명 |
LocalDate | int | getYear() | 년도 |
Month | getMonth() | Month의 열거값(이름 ex:SEPTMEBER) | |
int | getMonthValue() | 월 | |
int | getDayOfYear() | 1년의 몇 번째 일 (2월 5일 ㅡ> 36일) | |
int | getDayOfMonth() | 월의 몇 번째 일(10월 14일 ㅡ> 14일) | |
DayOfWeek | getDayOfWeek() | 요일(ex : SUNDAY) | |
boolean | isLeapYear() | 윤년 여부 | |
LocalTime | int | getHour() | 시간 |
int | getMinute() | 분 | |
int | getSecond() | 초 | |
int | getNano() | 나노초 |
*LocalDateTime은 전부 다 사용가능
더하기/빼기 메서드
LocalDate | LocalTime | ||
메서드 | 설명 | 메서드 | 설명 |
minusYears(long) | 년도 빼기 | minusHours(long) | 시간 빼기 |
minusMonths(long) | 월 빼기 | minusMinutes(long) | 분 빼기 |
minusDays(long) | 일 빼기 | minusSeconds(long) | 초 빼기 |
minusWeeks(long) | 주 빼기 | minusNanoss(long) | 나노초 빼기 |
plusYears(long) | 년도 더하기 | plusHours(long) | 시간 더하기 |
plusMonths(long) | 월 더하기 | plusMinute(long) | 분 더하기 |
plusDays(long) | 일 더하기 | plusSeconds(long) | 초 더하기 |
plusWeeks(long) | 주 더하기 | plusNanos(long) | 나노초 더하기 |
LocalDate사용 예시
LocalDate id = LocalDate.now();
System.out.println(id);
LocalDate id2 = id
.minusYears(2)
.plusMonths(3)
.minusDays(4);
System.out.println(id2);
LocalDate id3 = id2.minusDays(3);
System.out.println(id3);
LocalDate id4 = id3.plusWeeks(3);
System.out.println(id4);
1. 현재 날짜를 지정하는 LocalDate객체를 생성한다.(참조변수 id)
2. 참조변수 id에 메서드 체이닝을 사용하여 minusYears(2), plusMonths(3), minusDays(4) 메서드를
순차적으로 호출하고, 값을 참조변수 id2에 저장한다.
3. 참조변수 id2에 minusDays(3) 메서드를 호출하여 3일을 빼고, 그 값을 참조변수 id3에 저장한다.
4. 참조변수 id2에 plusWeeks(3) 메서드를 호출하여 3주를 더하고, 그 값을 참조변수 id4에 저장한다.
LocalTime 사용 예시
LocalDateTime id = LocalDateTime.now();
System.out.println(id);
LocalDateTime id2 = id
.minusHours(5)
.plusMinutes(30)
.minusSeconds(4);
System.out.println(id2);
LocalDateTime id3 = id2.minusHours(24);
System.out.println(id3);
1. 현재 날짜와 시간을 지정하는 LocalDateTime객체를 생성한다.(참조변수 id)
2. 참조변수 id에 메서드 체이닝을 사용하여 minusHours(5), plusMinutes(30), minusSeconds(4) 메서드를
순차적으로 호출하고, 값을 참조변수 id2에 저장한다.
3. 참조변수 id2에 minusHours(24) 함수를 호출하여 24시간을 빼고, 그 값을 참조변수 id3에 저장한다.
정보 값을 변경하는 메서드
LocalDate | LocalTime | ||
메서드 | 설명 | 메서드 | 설명 |
withYear(int) | 년 변경 | withHour(int) | 시간 변경 |
withMonth(int) | 월 변경 | withMinute(int) | 분 변경 |
withDayOfMonth(int) | 월의 일 변경 | withSecond(int) | 초 변경 |
withDayOfYear(int) | 년의 일 변경(1~365) | withNano(int) | 나노초 변경 |
LocalDate예시
LocalDate id = LocalDate.now();
System.out.println(id);
LocalDate id2 = id
.withYear(1999)
.withMonth(8)
.withDayOfYear(23);
System.out.println(id2);
1. 현재 날짜를 지정하는 LocalDate객체를 생성한다.(참조변수 id)
2. 참조변수 id에 메서드 체이닝을 사용하여 withYear(1999), withMonth(8), withDayOfYear(23) 메서드를
순차적으로 호출하고, 그 값을 참조변수 id2에 저장한다.
3. id2를 호출하면 1999-01-23이 호출된다. 메서드 체이닝 특성상 순차적으로 호출되기 때문에 withDayOfYear() 메서드로 앞에서 withMonth() 메서드를 덮어씌운 것이다.
LocalTime예시
LocalTime lt = LocalTime.now();
System.out.println(lt);
LocalTime lt2 = lt
.withMinute(25)
.withSecond(24)
.withNano(33333);
System.out.println(lt2);
1. 현재 시간을 지정하는 LocalTime객체를 생성한다.(참조변수 lt)
2. 참조변수 lt에 메서드 체이닝을 사용하여 withMinute(25), withSecond(24), withNano(33333) 메서드를
순차적으로 호출하고, 그 값을 참조변수 lt2에 저장한다.
특정 날짜를 리턴하는 메서드
with()는 파라미터로 TemporalAdjuster타입을 인자로 받으면 특정 날짜를 리턴한다.
메서드
메서드 | 설명 |
firstDayOfYear() | 년도의 첫 번째 일 |
lastDayOfYear() | 년도의 마지막 일 |
firstDayOfMonth() | 달의 첫 번째 일 |
lastDayOfMonth() | 달의 마지막 일 |
firstInMonth(DayOfWeek d) | 달의 첫 번째 요일 |
lastInMonth(DayOfWeek d) | 달의 마지막 요일 |
next(DayOfWeek d) | 돌아오는 요일 |
nextOrSame(DayOfWeek d) | 오늘을 포함한 돌아오는 요일 |
previous(DayOfWeek d) | 지난 요일 |
previousOrSame(DayOfWeek d) | 오늘을 포함한 지난 요일 |
사용 예시
LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt);
LocalDateTime new_ldt;
new_ldt = ldt.with(TemporalAdjusters.firstDayOfYear());
System.out.println("올해의 첫 번째 날 : "+new_ldt);
new_ldt = ldt.with(TemporalAdjusters.lastDayOfYear());
System.out.println("올해의 마지막 날 : "+new_ldt);
1. 현재 날짜와 시간을 지정하는 LocalDateTime객체를 생성한다.(참조변수 ldt)
2. LocalDateTime객체를 선언만 한다.(참조변수 new_ldt)
3. 참조변수 ldt에 파라미터를 TemporalAdjusters.firstDayOfYear()로 가진 with() 메서드를 호출하고
그 값을 new_ldt에 저장한다.
4. 참조변수 ldt에 파라미터를 TemporalAdjusters.lastDayOfYear()로 가진 with() 메서드를 호출하고
그 값을 new_ldt에 저장한다.
정보 값을 비교하는 메서드
메서드 | 설명 |
isAfter() | 이전의 날짜인지 비교하여 boolean값 반환 |
isBefore() | 이후의 날짜인지 비교하여 boolean값 반환 |
isEqual() | 동일 날짜인지 비교하여 boolean값 반환 |
until() | 날짜나 시간의 차이를 반환 |
between() | 전체 날짜나 시간의 차이를 반환 |
isAfter(), isBefore() 메서드는 유통기한에 많이 사용한다.
사용 예시
LocalDateTime ldt1 = LocalDateTime.of(2010,1,1,12,23,23,444);
System.out.println(ldt1);
LocalDateTime ldt2 = LocalDateTime.of(2010,12,25,1,12,2,232);
System.out.println(ldt2);
System.out.println(ldt1.isAfter(ldt2));
System.out.println(ldt1.isBefore(ldt2));
System.out.println(ldt1.isEqual(ldt2));
LocalDateTime start = LocalDateTime.of(2024,1,1,10,0);
LocalDateTime end = LocalDateTime.of(2024,1,2,10,0);
Duration duration = Duration.between(start, end);
System.out.println("두 날짜 사이의 차이(초) : "+duration.getSeconds());
long hours = start.until(end, ChronoUnit.HOURS);
System.out.println("두 날짜 사이의 차이(시간) : "+hours);
1. 연초가 지정된 LocalDateTime객체를 생성한다.(참조변수 ldt1)
2. 크리스마스가 지정된 LocalDateTime객체를 생성한다.(참조변수 ldt2)
3. println()을 3번 사용해 각각 참조변수 ldt1에 ldt2를 파라미터로 가진 isAfter(), isBefore(), isEqual()
메서드를 호출하고, 그 값을 호출한다.
체이닝
하나의 객체로 함수를 여러 번 실행하는 것으로, 앞에 실행된 함수가 뒤에 실행된 함수에 영향을 받을 수 있으니 잘 확인하고 써야 한다.
'Back_end > JAVA' 카테고리의 다른 글
JAVA - 컬렉션 프레임워크 (0) | 2024.09.30 |
---|---|
JAVA - 기본 API(formatting, Object) (0) | 2024.09.29 |
JAVA - 기본 API(Timer/TimerTask) (0) | 2024.09.27 |
JAVA - 기본 API(BigDecimal, Wrapper) (0) | 2024.09.27 |
JAVA - 기본 API(java.util.Scanner) (0) | 2024.09.27 |