윤년, 일광 절약 시간(일부 지역은 태양이 일찍 뜨는 3,10월에 1시간 앞당기거나 미룬다고함,,), 나라별로 다른 시간 등등 개발자는 날짜나 시간 로직에 있어서 골치아프다!!!

이러한 복잡성 때문에 대부분의 현대 개발 환경에서는 날짜와 시간을 처리하기 위해 잘 설계된 라이브러리를 사용해야한다..!

java.time 패키지는 이전 API의 문제점을 해결하면서, 사용성, 성능, 스레드 안전성, 타임존 처리 등에서 크게 개선

앞에 Local (현지의, 특정 지역의)이 붙는 이유는 세계 시간대를 고려하지 않아서 타임존이 적용되지 않기 때문이다. 특정 지역의 날짜와 시간만 고려할 때 사용한다.

즉, 개발시 국내 서비스만 고려할 때 사용한다!

모든 날짜 클래스는 불변이다. 따라서 변경이 발생하는 경우 새로운 객체를 생성해서 반환하므로 반환값을 꼭 받아야 한다!

가장 많이 쓰는 LocalDate와 LocalDateTime에 대한 예시 코드이다.

public class LocalDateMain {

	public static void main(String[] args) {
	
		LocalDate nowDate = LocalDate.now();
		LocalDate ofDate = LocalDate.of(2013, 11, 21);
		
		System.out.println("오늘 날짜 = " + nowDate);
		System.out.println("지정 날짜 = " + ofDate);
		
		//계산(불변)
		LocalDate plusDays = ofDate.plusDays(10);
		System.out.println("지정 날짜+10d = " + plusDays);
	}
}
// 실행결과
현재 시간 = 11:52:51.219602
지정 시간 = 09:10:30
지정 시간+30s = 09:11:00
public class LocalDateTimeMain {

	public static void main(String[] args) {
	
		LocalDateTime nowDt = LocalDateTime.now();
		LocalDateTime ofDt = LocalDateTime.of(2016, 8, 16, 8, 10, 1);
		
		System.out.println("현재 날짜시간 = " + nowDt);
		System.out.println("지정 날짜시간 = " + ofDt);
		
		//날짜와 시간 분리
		LocalDate localDate = ofDt.toLocalDate();
		LocalTime localTime = ofDt.toLocalTime();
		
		System.out.println("localDate = " + localDate);
		System.out.println("localTime = " + localTime);
		
		//날짜와 시간 합체
		LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
		System.out.println("localDateTime = " + localDateTime);
		
		//계산(불변)
		LocalDateTime ofDtPlus = ofDt.plusDays(1000);
		System.out.println("지정 날짜시간+1000d = " + ofDtPlus);
		LocalDateTime ofDtPlus1Year = ofDt.plusYears(1);
		System.out.println("지정 날짜시간+1년 = " + ofDtPlus1Year);
		
		//비교
		System.out.println("현재 날짜시간이 지정 날짜시간보다 이전인가? " +
		nowDt.isBefore(ofDt));
		System.out.println("현재 날짜시간이 지정 날짜시간보다 이후인가? " +
		nowDt.isAfter(ofDt));
		nowDt.isEqual(ofDt));
		System.out.println("현재 날짜시간과 지정 날짜시간이 같은가? " +
}

//실행결과
현재 날짜시간 = 2024-02-09T11:54:54.389163
지정 날짜시간 = 2016-08-16T08:10:01
localDate = 2016-08-16
localTime = 08:10:01
localDateTime = 2016-08-16T08:10:01
지정 날짜시간+1000d = 2019-05-13T08:10:01
지정 날짜시간+1년 = 2017-08-16T08:10:01
현재 날짜시간이 지정 날짜시간보다 이전인가? false
현재 날짜시간이 지정 날짜시간보다 이후인가? true
현재 날짜시간과 지정 날짜시간이 같은가? false