on
[자바] 20. 날짜 이슈 Calender, Date, LocalDate
[자바] 20. 날짜 이슈 Calender, Date, LocalDate
날짜객체를 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로 판단한다.
Calendar 와 Date 는 외부에서 날짜 변경이 가능하므로 멀티쓰레드 환경에서 위험하다고 한다.
또한 날짜에서 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); } }
from http://pulpul8282.tistory.com/228 by ccl(A) rewrite - 2021-12-20 21:27:47