윤년, 일광 절약 시간(일부 지역은 태양이 일찍 뜨는 3,10월에 1시간 앞당기거나 미룬다고함,,), 나라별로 다른 시간 등등 개발자는 날짜나 시간 로직에 있어서 골치아프다!!!
이러한 복잡성 때문에 대부분의 현대 개발 환경에서는 날짜와 시간을 처리하기 위해 잘 설계된 라이브러리를 사용해야한다..!
java.time 패키지는 이전 API의 문제점을 해결하면서, 사용성, 성능, 스레드 안전성, 타임존 처리 등에서 크게 개선
2013-11-2108:20:30.213
초는 밀리초, 나노초 단위도 포함할 수 있다.LocalDate 와 LocalTime 을 합한 개념이다. 예) 2013-11-21T08:20:30.213앞에 Local (현지의, 특정 지역의)이 붙는 이유는 세계 시간대를 고려하지 않아서 타임존이 적용되지 않기 때문이다. 특정 지역의 날짜와 시간만 고려할 때 사용한다.
즉, 개발시 국내 서비스만 고려할 때 사용한다!
2013-11-21T08:20:30.213+9:00[Asia/Seoul]2013-11-21T08:20:30.213+9:00모든 날짜 클래스는 불변이다. 따라서 변경이 발생하는 경우 새로운 객체를 생성해서 반환하므로 반환값을 꼭 받아야 한다!
가장 많이 쓰는 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