Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

나의 IT일지

LocalDateTime 클래스 본문

프로그래밍 언어/Java

LocalDateTime 클래스

세레프 2023. 5. 19. 22:47

 자바에서는 개발자가 편하게 개발할 수 있도록 기본적인 클래스나 인터페이스를 구현해 놓았다. 이를 API라고 하며, API 중에서는 날짜와 시간를 관리하는 java.util.Date와 java.util.Calendar 클래스가 존재한다.

 

Calendar클래스, Date클래스

자바는 프로젝트안에 패키지를 만들고 패키지 안에 클래스를 만들며, 클래스에 메서드와 필드를 구현한다. 즉, 패키지는 클래스를 모아놓은 것이며, import를 통해 호출해서 해당 패키지의 클래

my-it-diary.tistory.com

 하지만  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 (Java Platform SE 8 )

Returns a copy of this date with the specified field set to a new value. This returns a LocalDate, based on this one, with the value for the specified field changed. This can be used to change any supported field, such as the year, month or day-of-month. I

docs.oracle.com

 

LocalTime (Java Platform SE 8 )

Returns a copy of this time with the specified field set to a new value. This returns a LocalTime, based on this one, with the value for the specified field changed. This can be used to change any supported field, such as the hour, minute or second. If it

docs.oracle.com

 

LocalDateTime (Java Platform SE 8 )

Returns a copy of this date-time with the specified field set to a new value. This returns a LocalDateTime, based on this one, with the value for the specified field changed. This can be used to change any supported field, such as the year, month or day-of

docs.oracle.com

 

  • 날짜, 시간 지정
사용 가능 클래스 메서드 용도
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