본문으로 바로가기

[자바] 20. 날짜 이슈 Calender, Date, LocalDate

category Language/자바 2021. 12. 20. 21:21
728x90
반응형
SMALL

날짜객체를 3가지를 쓰다보니깐 결국 이슈가 터졌다....

 

Calendar에서는

1주를 일~토: 1~7  로 판단한다.

월(Month)을 1월~12월: 0~11로 판단한다.

 

Date

1주를 일~토: 0~6 으로 판단한다.

월(Month)을 1월~12월: 0~11로 판단한다.

 

LocalDate는 

1주를 월~일: 1~7 로 판단한다 

월(Month)을 1월~12월: 1~12로 판단한다.

 

CalendarDate 는 외부에서 날짜 변경이 가능하므로 멀티쓰레드 환경에서 위험하다고 한다.

또한 날짜에서 0이라는 의미가 매우 개발시에 혼동을 주곤한다.(나도 많이 느꼈다...)

현재 두 날짜 객체 모두 Deprecated 되어있다.

 

LocalDate는 불변객체로서 주로 해당 객체를 통한 날짜계산을 권장하고 있다.

 

 

*두 날짜 사이의 평일 구하기

package hi;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Period;
import java.time.temporal.ChronoUnit;

public class testDate {
	public static void main(String[] args) {
		LocalDate start = LocalDate.of(2021, 12, 01);
		LocalDate end = LocalDate.of(2021, 12, 15);
		LocalDate temp = start;
		
		long result1 = ChronoUnit.DAYS.between(start,end); // 14
		
		Period change = Period.between(start, end);
		int result2 = change.getDays(); //14
		
		long result3 = start.until(end, ChronoUnit.DAYS);//14
		
		System.out.println("날짜 사이 값은?==========");
		System.out.println("결과1: "+result1);
		System.out.println("결과2: "+result2);
		System.out.println("결과3: "+result3);
		int countHoliday = 0;
		
		for (int i = 0; i <= result2; i++) {
			DayOfWeek day = temp.getDayOfWeek();
			//System.out.println(day);
			int number = day.getValue();
			if(number !=6 && number !=7){countHoliday++;}
			temp = temp.plusDays(1);
			}
		System.out.println(countHoliday);
		
		}
		
	}

 

728x90
반응형
LIST