- 날짜 및 시각 정보를 관리하는 기능의 패키지 JDK 8부터 제공됨
- LocalDate 클래스 : 날짜 관련 기능 제공 LocalTime 클래스: 시각 관련 기능 제공 LocalDateTime 클래스: 날짜,시각 관련 기능 제공
- toString() 메서드 오버라이딩 되어있음
- 각 클래스의 now() 메서드 호출하여 현재 시스템의 정보 가져오고, of() 메서드를 호출하여 날짜 및 시각 정보 설정 가능
- getXXX() 메서드를 호출하여 항목별 정보 가져오기 => XXX은 가져올 정보의 종류(ex.연도는 getYear(), 시각은 getHour())
now() 메서드를 사용하여 정보 가져오기
LocalDate date = LocalDate.now(); //sys의 날짜 정보 리턴받음
System.out.println(date);
결과: 2023-10-25
LocalTime time = LocalTime.now(); //sys의 시각 정보 리턴받음
System.out.println(time);
결과: 10:25:57.526710200
LocalTime time = LocalTime.now(); //sys의 시각 정보 리턴받음
System.out.println(time);
결과: 10:25:57.526710200
LocalDateTime dateTime = LocalDateTime.now(); // 날짜, 시각 정보 리턴받음
System.out.println(dateTime);
결과: 2023-10-25T10:25:57.526710200
of() 메서드를 사용하여 정보 설정하기
LocalDate date2 = LocalDate.of(2000, 1, 1); // 연, 월, 일 정보 설정
System.out.println(date2);
결과: 2000-01-01
LocalTime time2 = LocalTime.of(17, 50, 1); //시, 분, 초 정보 설정
System.out.println(time2);
결과: 17:50:01
- LocalDateTime 클래스의 of() 메서드는 각각의 정보를 따로 설정도 가능하며, LocalDate와 LocalTime 객체로도 파라미터로 전달받을 수 있음(설정 가능)
LocalDateTime dateTime2 = LocalDateTime.of(date2, time2);
System.out.println(dateTime2);
결과: 2000-01-01T17:50:01
getXXX() 메서드를 통해 항목별 정보 가져오기
int year = date.getYear();
int month = date.getMonthValue();
//=> 주의! getMonth() 메서드는 Month 타입 객체 리턴됨
int day = date.getDayOfMonth();
System.out.println(year+"/"+month+"/"+day);
결과: 2023/10/25
Month 타입 객체 활용
➡️enum 타입 객체인 Month 타입으로 관리됨(각 월의 이름이 상수로 제공)
Month enumMonth = date.getMonth();
System.out.println(enumMonth);
String monthName = enumMonth.toString(); // 변수 생략시 String 변환 필수!
결과: OCTOBER
Month 객체를 한국식 표현법으로 변환할 경우
System.out.println(enumMonth.getDisplayName(TextStyle.SHORT, Locale.ENGLISH));
System.out.println(enumMonth.getDisplayName(TextStyle.SHORT, Locale.KOREAN));
결과:
Oct
10월
int hour = time.getHour();
int min = time.getMinute();
int sec = time.getSecond();
System.out.println(hour+":"+min+":"+sec);
결과: 10:44:22
날짜 또는 시각 정보에 대한 연산
해당 객체의 plusXXX 또는 minusXXX() 메서드를 사용하여 연산 가능
LocalDate today = LocalDate.now();
System.out.println(today);
plusXXX() 메서드를 호출하여 덧셈 연산 수행
System.out.println(today.plusMonths(8) ); //8개월 뒤 날짜 설정
System.out.println(today.plusDays(30) ); //30일 뒤 날짜 설정
minusXXX() 메서드를 호출하여 덧셈 연산 수행
System.out.println(today.minusMonths(8) ); //8개월 전 날짜 설정
System.out.println(today.minusDays(30) ); //30일 전 날짜 설정
빌더 패턴(Builder Pattern)을 활용하여 리턴타입이 자기 자신인 객체의 다음 메서드 차례대로 연결하여 수행 가능
System.out.println("빌더패턴을 활용한 날짜계산: "+today.plusMonths(1).plusDays(15));
날짜와 시각 정보 비교를 위해 compareTo(), isAfter(), isBefore(), isEqual() 등의 메서드 제공딤
1. compareTo()
현재 객체 날짜가 비교 대상 객체보다 이전이면 음수, 이후면 양수, 같으면 0을 리턴함
System.out.println(date2.compareTo(date4));
현재에 대해 과거다!
만약 비교대상의 연도가 같으면 월을 비교한다. 연, 월이 같으면 일을 비교함
비교대상 : 연 >> 월 >> 일
2. isAfter()
boolean 타입으로 비교함
System.out.println("설정된(기준) 날짜가 더 미래인가? : " + date3.isAfter(date4));
결과: 설정된(기준) 날짜가 더 미래인가? : false
3. isBefore()
System.out.println("설정된(기준) 날짜가 더 과거인가? : " + date3.isBefore(date4));
결과: 설정된(기준) 날짜가 더 과거인가? : true
4. isEqual()
System.out.println("설정된(기준) 날짜가 현재 날짜와 동일한가? : " + date3.isEqual(date4));
결과: 설정된(기준) 날짜가 현재 날짜와 동일한가? : false
5. until()
파라미터로 대상 객체와 항목 정보 지정. 항목정보는 ChronoUnit 객체(enum 타입)의 XXX 상수 사용
ex) ChronoUnit.YEARS 연도, ChronoUnit.DAYS 일
long result = date2.until(date4, ChronoUnit.YEARS);
System.out.println(result);
if(result>0) {
System.out.println(result + "년 남았습니다.");
} else if(result<0) {
System.out.println(result + "년 지났습니다.");
} else {
System.out.println(result + "올해입니다.");
}
결과:
23
23년 남았습니다.
'JAVA' 카테고리의 다른 글
[JAVA] enum type (1) (1) | 2023.10.31 |
---|---|
[JAVA] 날짜 및 시각 정보에 대한 형식화(Formatting) (0) | 2023.10.25 |
[JAVA] 날짜 및 시각 관련 클래스를 알아보자 (0) | 2023.10.25 |
[JAVA] Math.random() 메서드 활용 100% (1) | 2023.10.24 |
[JAVA] java.lang.Math 클래스 (0) | 2023.10.24 |