나의 IT일지
LocalDateTime 클래스 본문
자바에서는 개발자가 편하게 개발할 수 있도록 기본적인 클래스나 인터페이스를 구현해 놓았다. 이를 API라고 하며, API 중에서는 날짜와 시간를 관리하는 java.util.Date와 java.util.Calendar 클래스가 존재한다.
하지만 java.util.Date와 java.util.Calendar 클래스를 통해 날짜와 시간을 관리하기에는 한계가 명확하다. 그래서 jdk 8부터 Date 클래스와 Calendar클래스를 보안해서 만든 날짜와 시간을 관리하기 위한 패키지인 java.time 패키지를 주로 사용한다.
클래스 | 특징 |
LocalDate | - 날짜 정보를 저장 |
LocalTime | - 시간 정보를 저장 |
LocalDateTime | - 날짜 정보와 시간 정보를 저장, LocalDate클래스와 LocalTime 클래스를 결합한 형태 |
ZoneDateTime | - 협정 세계시(UTC)를 기준으로, 해당 위치의 날짜와 시간 정보를 저장 - 협정 세계시(UTC)와 차이 나는 시간은 따로 저장 생성 방법 : ZoneDateTime zdt = ZoneDateTime.now(ZoneId.of("대륙/나라")) |
Instant | - 협정 세계시(UTC)의 날짜와 시간 정보를 저장 - Machine time에 사용 생성 방법 :Instant ins = Instant.now( ) |
java.time.LocalDateTime
LocalDateTime클래스는 날짜 정보와 시간 정보를 객체에 저장하기 위해서 사용하는 클래스로, LocalDate클래스와 LocalTime 클래스를 결합한 클래스이다. 그래서 사용하는 메서드는 LocalDate클래스와 LocalTime 클래스와 유사하다.
- 날짜, 시간 지정
사용 가능 클래스 | 메서드 | 용도 |
LocalDate클래스 | now( ) | 현재 날짜 지정 |
LocalTime클래스 | 현재 시간 지정 | |
LocalDateTime클래스 | 현재 날짜와 시간 지정 | |
LocalDate클래스 | of(연도, 월, 일) | 특정 날짜 지정 |
LocalTime클래스 | of(시, 분, 초, 나노초) | 특정 시간 지정 |
LocalDateTime클래스 | of(연도, 월, 일, 시, 분, 초, 나노초) | 특정 날짜와 시간 지정 |
- 객체에 저장된 날짜, 시간 정보 호출
사용 가능 클래스 | 메서드 | 용도 | |
LocalDateTime클래스 | LocalDate클래스 | getYear( ) | 해당 객체에 저장되어 있는 "연도"를 호출 |
getMonth( ) | 해당 객체에 저장되어 있는 "월"을 열거값으로 호출 | ||
getMonthValue( ) | 해당 객체에 저장되어 있는 "월"을 정수값으로 호출 | ||
getDayOfYear( ) | 객체에 저장되어 있는 연도의 1월 1일 기준, 객체에 저장되어 있는 날짜가 몇 번째 일인지 호출 | ||
getDayOfMonth( ) | 객체에 저장되어 있는 월의 1일 기준, 객체에 저장되어 있는 날짜가 몇 번째 일인지 호출 | ||
getDayOfWeek( ) | 해당 객체에 저장되어 있는 "요일"을 정수값으로 호출 | ||
LocalTime클래스 | getHour() | 해당 객체에 저장되어 있는 "시"를 정수값으로 호출 | |
getMinute() | 해당 객체에 저장되어 있는 "분"를 정수값으로 호출 | ||
getSecond() | 해당 객체에 저장되어 있는 "초"를 정수값으로 호출 | ||
getNano() | 해당 객체에 저장되어 있는 "나노 초"를 정수값으로 호출 |
package pack0520;
import java.time.LocalDateTime;
public class Code1 {
public static void main(String[] args) {
LocalDateTime ld = LocalDateTime.now();
System.out.println(ld);
System.out.println(ld.getYear());
System.out.println(ld.getMonth());
System.out.println(ld.getMonthValue());
System.out.println(ld.getDayOfYear());
System.out.println(ld.getDayOfMonth());
System.out.println(ld.getDayOfWeek());
System.out.println(ld.getHour());
System.out.println(ld.getMinute());
System.out.println(ld.getSecond());
System.out.println(ld.getNano());
}
}
이때, Calendar 클래스는 1월이 0으로 시작하지만, LocalDate는 1월은 1로 시작한다.
- 객체에 저장된 날짜, 시간 정보 더하기/ 빼기
사용 가능 클래스 | 메서드 | 용도 | |
LocalDateTime클래스 | LocalDate클래스 | minusYears(실수) | 해당 객체에 저장되어 있는 "연도"을 실수값만큼 빼기 |
minusMonths(실수) | 해당 객체에 저장되어 있는 "월"을 실수값만큼 빼기 | ||
minusDays(실수) | 해당 객체에 저장되어 있는 "일"을 실수값만큼 빼기 | ||
minusWeeks(실수) | 해당 객체에 저장되어 있는 "일"를 실수값* 7만큼 빼기 | ||
plusYears(실수) | 해당 객체에 저장되어 있는 "연도"을 실수값만큼 더하기 | ||
plusMonths(실수) | 해당 객체에 저장되어 있는 "월"을 실수값만큼 더하기 | ||
plusDays(실수) | 해당 객체에 저장되어 있는 "일"을 실수값만큼 더하기 | ||
plusWeeks(실수) | 해당 객체에 저장되어 있는 "일"을 실수값* 7만큼 더하기 | ||
LocalTime클래스 | minusHours(실수) | 해당 객체에 저장되어 있는 "시"를 실수값만큼 빼기 | |
minusMinutes(실수) | 해당 객체에 저장되어 있는 "분"을 실수값만큼 빼기 | ||
minusSeconds(실수) | 해당 객체에 저장되어 있는 "초"을 실수값만큼 빼기 | ||
minusNanos(실수) | 해당 객체에 저장되어 있는 "나노 초"을 실수값만큼 빼기 | ||
plusHours(실수) | 해당 객체에 저장되어 있는 "시"를 실수값만큼 더하기 | ||
plusMinutes(실수) | 해당 객체에 저장되어 있는 "분"을 실수값만큼 더하기 | ||
plusSeconds(실수) | 해당 객체에 저장되어 있는 "초"을 실수값만큼 더하기 | ||
plusNanos(실수) | 해당 객체에 저장되어 있는 "나노 초"을 실수값만큼 더하기 |
package pack0520;
import java.time.LocalDateTime;
public class Code2 {
public static void main(String[] args) {
LocalDateTime ld = LocalDateTime.now();
System.out.println(ld);
LocalDateTime ld2 = ld.minusYears(2).plusMonths(3).minusDays(4);
System.out.println(ld2);
//자동 변환
LocalDateTime ld3 = ld.plusDays(15);
System.out.println(ld3);
LocalDateTime ldt = LocalDateTime.now();
System.out.println("현재 시간 : "+ ldt);
LocalDateTime ldt2 = ldt.minusHours(2).plusMinutes(3).minusSeconds(4);
System.out.println("변경 시간 : "+ ldt2);
//자동 변환
LocalDateTime ldt3 = ldt.minusHours(24);
System.out.println("변경 시간 : "+ ldt3);
}
}
이때, 해당 메서드의 리턴 타입은 해당 클래스 타입이기에 "."연산자를 통해 메서드를 이어서 사용할 수 있으며, 왼쪽부터 연산한다.
추가적으로, 만약 실수 값으로 인해 객체에 저장된 날짜, 시간의 정보가 해당 정보의 범위에 속하지 않을 경우, 자동 변환이 진행된다.
- 객체에 저장된 날짜, 시간 정보 값 변경
사용 가능 클래스 | 메서드 | 용도 | |
LocalDateTime클래스 | LocalDate클래스 | withYear(정수) | 해당 객체의 "연도"를 정수 값으로 변경 |
withMonth(정수) | 해당 객체의 "월"을 정수 값으로 변경 | ||
withDayOfMonth(정수) | 해당 객체의 "일"을 정수 값으로 변경 | ||
withDayOfYear(정수) | 객체에 저장되어 있는 연도의 1월 1일을 시작으로, 해당 정수 값 만큼 증가 | ||
LocalTime클래스 | withHour(정수) | 해당 객체의 "시"를 정수 값으로 변경 | |
withMinute(정수) | 해당 객체의 "분"을 정수 값으로 변경 | ||
withSecond(정수) | 해당 객체의 "초"를 정수 값으로 변경 | ||
withNano(정수) | 해당 객체의 "나노 초"를 정수 값으로 변경 |
package pack0520;
import java.time.LocalDate;
import java.time.LocalTime;
public class Code3 {
public static void main(String[] args) {
LocalDate ld = LocalDate.now();
System.out.println(ld);
LocalDate new_ld = ld.withYear(1999).withMonth(8).withDayOfYear(70);
System.out.println(new_ld);
LocalTime lt = LocalTime.now();
System.out.println(lt);
LocalTime newTime= lt.withHour(3).withMinute(25).withSecond(24).withNano(33333);
System.out.println(newTime);
}
}
- 객체에 저장된 연도가 윤년인지 확인
사용 가능 클래스 | 메서드 | 용도 |
LocalDate클래스 | isLeapYear( ) | 해당 객체에 저장되어 있는 연도가 윤년인지 확인 |
package pack0520;
import java.time.LocalDate;
public class Code4 {
public static void main(String[] args) {
LocalDate ld = LocalDate.now();
LocalDate newLd;
int count = 0;
for(int i = 1990; i<=2030; i++) {
newLd = ld.withYear(i);
if(newLd.isLeapYear()) {
System.out.println(newLd.getYear()+"년은 윤년입니다.");
count++;
}
}
System.out.printf("1990년부터 2030년 까지 %d번의 윤년이 있다.",count);
}
}
- 객체에 저장된 날짜, 시간 정보 값 비교
사용 가능 클래스 | 메서드 | 용도 |
LocalDateTime클래스, LocalDate클래스, LocalTime클래스 |
isAfter( 비교 객체 ) | 해당 객체가 비교 객체보다 이후의 날짜인지 비교 |
isBefore( 비교 객체 ) | 해당 객체가 비교 객체보다 이전의 날짜인지 비교 | |
isEqual( 비교 객체 ) | 해당 객체가 비교 객체보다 동일한 날짜인지 비교 |
package pack0520;
import java.time.LocalDateTime;
public class Code4 {
public static void main(String[] args) {
LocalDateTime ld = LocalDateTime.of(2010,5,3,12,23,0,10);
System.out.println(ld);
LocalDateTime ld2 = LocalDateTime.of(2010,5,3,13,23,5);
System.out.println(ld2);
System.out.println(ld.isAfter(ld2));
System.out.println(ld.isBefore(ld2));
System.out.println(ld.isEqual(ld2));
}
}
- 객체의 날짜, 시간 정보와 TemporalAdjuster 타입의 필드에 따른 특정 날짜 호출
사용 가능 클래스 | 메서드 | 용도 |
LocalDateTime클래스, LocalDate클래스, LocalTime클래스 |
with(TemporalAdjuster의 변수) | 해당 객체의 날짜, 시간 정보를 바탕으로, TemporalAdjuster의 변수를 조건으로 맞는 날짜 호출 |
TemporalAdjuster타입 메서드 | 조건 |
firstDayOfYear() | 해당 객체에 저장되어 있는 연도의 첫 번째 날 |
lastDayOfYear( ) | 해당 객체에 저장되어 있는 연도의 마지막 날 |
firstDayOfMonth( ) | 해당 객체에 저장되어 있는 월의 첫 번째 날 |
lastDayOfMonth( ) | 해당 객체에 저장되어 있는 월의 마지막 날 |
firstInMonth(DayOfWeek타입 요일) | 해당 객체에 저장되어 있는 월의 첫 번째 요일 |
lastInMonth(DayOfWeek타입 요일) | 해당 객체에 저장되어 있는 월의 마지막 요일 |
next(DayOfWeek타입 요일) | 해당 객체에 저장되어 있는 월의 다음 주 요일 |
nextOrSame(DayOfWeek타입 요일) |
해당 객체에 저장되어 있는 월의 금일을 포함한 다음 주 요일
|
previous(DayOfWeek타입 요일) | 해당 객체에 저장되어 있는 월의 저번 주 요일 |
previousOrSame(DayOfWeek타입 요일) | 해당 객체에 저장되어 있는 월의 금일을 포함한 저번 주 요일 |
package pack0520;
import java.time.DayOfWeek;
import java.time.LocalDateTime;
import java.time.temporal.TemporalAdjusters;
public class Code {
public static void main(String[] args) {
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);
new_ldt =ldt.with(TemporalAdjusters.firstDayOfMonth());
System.out.println("이번 달의 첫 번째 날: "+new_ldt);
new_ldt=ldt.with(TemporalAdjusters.lastDayOfMonth());
System.out.println("이번 달의 마지막 날: "+new_ldt);
new_ldt =ldt.with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
System.out.println("이번 달의 첫 번째 월요일: "+new_ldt);
new_ldt =ldt.with(TemporalAdjusters.lastInMonth(DayOfWeek.SUNDAY));
System.out.println("이번 달의 마지막 일요일: "+new_ldt);
new_ldt =ldt.with(TemporalAdjusters.next(DayOfWeek.FRIDAY));
System.out.println("돌아오는 금요일: "+new_ldt);
new_ldt =ldt.with(TemporalAdjusters.nextOrSame(DayOfWeek.FRIDAY));
System.out.println("오늘을 포함한 다음 금요일: "+new_ldt);
new_ldt =ldt.with(TemporalAdjusters.previous(DayOfWeek.MONDAY));
System.out.println("지난 월요일: "+new_ldt);
new_ldt =ldt.with(TemporalAdjusters.previous(DayOfWeek.MONDAY));
System.out.println("오늘을 포함한 지난 월요일: "+new_ldt);
}
}
'프로그래밍 언어 > Java' 카테고리의 다른 글
기타 API 클래스 (0) | 2023.05.23 |
---|---|
Scanner 클래스 (0) | 2023.05.22 |
Calendar클래스, Date클래스 (0) | 2023.05.18 |
StringTokenizer클래스, Random클래스 (0) | 2023.05.17 |
Wrapper클래스 (0) | 2023.05.16 |
Comments