본문 바로가기
Java

Java.time 패키지

by 이쟝 2022. 1. 1.

java.time - 날짜와 시간을 다루는데 필요한 핵심 클래스 제공

 

java.time패키지의 핵심 클래스

 

LocalDate 날짜를 나타내는 클래스
LocalTime 시간을 나타내는 클래스
LocalDateTime 날짜, 시간을 모두 표현하는 클래스
ZonedDateTime 날짜, 시간, 장소까지 표현하는 클래스
Period 두 날짜 간의 차이를 표현하기 위한 클래스 
Duration 두 시간의 차이를 표현하기 위한 클래스

 

이 클래스들의 특징은 String 클래스처럼 불변 

-> 날짜나 시간을 변경하는 메서드들은 기존의 객체를 변경하는 대신 항상 새로운 객체를 반환(그래서 대입연산자 필요!) 


객체 생성하기

1. now( ) 현재 날짜와 시간을 저장하는 객체 생성

 

import java.time.*;

public class DateTime {

	public static void main(String[] args) {
		// 1. now( ) 현재 날짜, 시간, 장소 출력

		LocalDate date1 = LocalDate.now();
		System.out.println(date1);  // 2022-01-01
		
		LocalTime time1 = LocalTime.now();
		System.out.println(time1);  // 19:52:16.795588800
		
		LocalDateTime dateTime1 = LocalDateTime.now();
		System.out.println(dateTime1);  //2022-01-01T19:53:06.364487
		
		ZonedDateTime zonedDateTime1 = ZonedDateTime.now();
		System.out.println(zonedDateTime1);  //2022-01-01T19:54:35.160073800+09:00[Asia/Seoul]

 

2. .of( ) 사용자 지정으로 설정

 

import java.time.*;

public class DateTime {

	public static void main(String[] args) {
		// 2. of( ) 사용자 지정 출력
		
		LocalDate date2 = LocalDate.of(2022,11,06);
		System.out.println(date2);  // 2022-11-06
		
		LocalTime time2 = LocalTime.of(01,20,30);
		System.out.println(time2);  // 01:20:30
		
//		LocalDateTime dateTime2 = LocalDateTime.of(2022,11,06,01,20,30);  // 아래코드와 동일
		LocalDateTime dateTime2 = LocalDateTime.of(date2,time2);
		System.out.println(dateTime2);  // 2022-11-06T01:20:30

//		ZonedDateTime zonedDateTime2 = ZonedDateTime.of(date2,time2,ZoneId.of("Asia/Seoul")); // 아래코드와 동일
		ZonedDateTime zonedDateTime2 = ZonedDateTime.of(dateTime2,ZoneId.of("Asia/Seoul"));
		System.out.println(zonedDateTime2);  // 2022-11-06T01:20:30+09:00[Asia/Seoul]

 

 -> now( )와 of( )는 static 메서드로 구현


특정 필드의 값 가져오기 get.----( ) 

간단히 get—( )메서드로 호출이 가능 월의 범위는 1~12, 요일은 월1 ~ 7

 

LocalDate date2.getYear( ) 년도(2022)
date2.getMonthValue( ) (11) – 숫자
date2.getMonth( ) (NOVEMBER) – 영어
date2.getDayOfMonth( ) (6)
date2.getDayOfYear( ) 같은 해의 11일부터의 일수(310)
date2.getDayOfWeek( ) 요일(SUNDAY)
date2.get.lengthOfMonth( ) 30(11월의 총 일수)
date2.get.lengthOfYear( ) 365(같은 해의 총 일수), 윤년이면 366
date.isLeapYear( ) false(윤년여부 확인)

 

LocalTime time2.getHour( ) 1()
time2.getMinute( ) 20()
time2.getSecond( ) 30()
time2.getNano( ) 0(나노초)

 


필드의 값 변경하기

날짜와 시간에서 특정 필드 값을 변경하려면 with로 시작하는 메서드 사용한다. 

 

date2 = date2.withYear(2023);           // 년도를 2023년으로 변경
System.out.println(date2.getYear());    // 2023
		
date2 = date2.withMonth(12);            // 월을 12월로 변경
System.out.println(date2.getMonth());   // DECEMBER
		
date2 = date2.withDayOfMonth(7);            // 일을 7일로 변경
System.out.println(date2.getDayOfMonth());  // 7 
		
time2 = time2.withHour(2);                  // 시를 2시로 변경
System.out.println(time2.getHour());        // 2
		
time2 = time2.withMinute(21);               // 분을 21분으로 변경
System.out.println(time2.getMinute());      // 21
		
time2 = time2.withSecond(31);               // 초를 31초로 변경
System.out.println(time2.getSecond());      // 31

 


Period 

두 날짜의 차이를 나타내는 period는 between( )으로 얻을 수 있음

 

System.out.println(date1);                    // 2022-01-01
System.out.println(date2);                    // 2023-12-07
Period period = Period.between(date1, date2); 
System.out.println(period);					  // P1Y11M6D
Period period2 = Period.between(date2, date1);
System.out.println(period2);          		  // P-1Y-11M-6D

 

LocalDate의 toEpochDay( )period를 사용하지 않고, 두 날짜 사이의 일 수를 편하게 계산할 수 있다.

 

LocalDate date3 = LocalDate.now();            // 2022.01.01
LocalDate date4 = LocalDate.of(2022, 12, 31);
long period3 = date4.toEpochDay() - date3.toEpochDay();
System.out.println(period3);                  // 364

'Java' 카테고리의 다른 글

BufferedReader, BufferedWriter, StringTokenizer  (0) 2022.01.17
재귀호출( recursive call)  (0) 2022.01.13
ChoiceFormat과 MessageFormat  (0) 2022.01.08
Math클래스의 round와 random 메소드  (0) 2021.12.29