본문 바로가기
Back_end/JAVA

JAVA - 기본 API(java.time)

by hyeon1016 2024. 9. 30.

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