📌Java 8 이후의 도입된 현재의 날짜 및 시간 가져오기
Java에서는 날짜와 시간을 다루는 java.util.Date, java.util.Calender 두 개의 클래스가 존재하였습니다. 하지만 여러 가지 이유로 사람들은 사용하길 지양하고, 별도의 오픈 소스 라이브러리를 사용하여 시간, 날짜를 표현하였습니다. 하지만 이러한 문제를 해결하고자 Java 8 이후에 새로운 클래스들이 등장하였습니다.
🟥Calender, Date의 사용을 지양하는 여러 가지 이유 - 아래 링크 확인
🟥출처 : https://d2.naver.com/helloworld/645609
📌새로운 클래스의 등장 - Java 8 이후
- java.time.LocalDate
- java.time.LocalTime
- java.time.LocalDateTime
새로이 등장한 java.time 패키지는 기존의 Date, Calender의 문제를 보완한 클래스이기 때문에 객체의 불변성을 보장한다.
📌java.time(패키지) - LocalDate, LocalTime, LocalDateTime
Date, Calender 클래스 대신 사용하던 오픈 소스 라이브러리 joda time과 비슷하게 설계되었으며, 새로이 날짜와 시간을 나타내는 API인 위 세 개의 클래스는 ISO-8601에 정의된 Calender System을 기반으로 한다.
📌LocalDate
LocalDate currentDate = LocalDate.now();
System.out.println(currentDate);
//년, 월, 일 인자
//LocalDate targetDate = LocalDate.of(int year, int month, int day);
LocalDate targetDate = LocalDate.of(2023, 2, 1);
System.out.println(targetDate)
//결과
//2023-02-02
//2023-02-01
🟥LocalDate 클래스는 날짜 정보만을 나타내기 위해 사용된다.
📌LocalDate - 클래스 메서드
메서드 | 설명 |
int getYear() | 년도 반환 |
intgetMonthValue() | 월 반환 |
Month getMonth() | 월 반환 |
int getDayOfMonth | 일 반환 |
int getDayOfYear | 일 반환 |
DayOfWeek getDayOfWeek | 요일 반환 |
📌LocalTime
//로컬의 현재 시간 정보
LocalTime currTime = LocalTime.now();
//시간 정보의 인자를 객체로 리턴
LocalTime targetTime = LocalTime.of(int hour, int minute, int second, int nanoOfSecond);
🟥LocalTime 클래스는 시간 정보만을 나타내기 위해 사용된다.
📌LocalTime - 클래스 메서드
메서드 | 설명 |
int getHour() | 시간 반환 |
int getMinute | 분 반환 |
int getSecond | 초 반환 |
int getNano | 나노초 반환 |
int get(TemporalFiled field) | field에 명시된 값 int형 반환 |
long getLong(TemporalFiled field) | field에 명시된 값 long형 반환 |
📌LocalDateTime
//로컬의 현재 날짜와 시간 정보
LocalDateTime currentDateTime = LocalDateTime.now();
//날짜와 시간 정보의 인자를 객체로 리턴
LocalDateTime targetDateTime = LocalDateTime.of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond);
🟥LocalDateTime 클래스는 날짜 정보와 시간 정보를 나타내기 위해 사용된다.
📌LocalDateTime - 클래스 메서드
LocalDateTime 클래스는 LocalDate, LocalTime의 결합이기 때문에 두 개의 클래스의 메서드를 모두 사용 가능하다.
📌TemporalField Interface이란?
TemporalField 인터페이스는 월(month-of-year)과 시(hour-of-day)와 같이 날짜와 시간과 관련된 필드를 정의해 놓은 인터페이스입니다. 이 인터페이스를 구현하여 날짜와 시간을 나타낼 때 사용하는 열거체가 바로 ChronoField입니다. 따라서 java.time 패키지에서 사용되는 클래스 메서드는 이 열거체를 사용하여 날짜와 시간을 처리하고 있습니다.
📌ChronoField의 대표적인 열거체
열거체 상수 | 설명 |
ERA | 시대 |
YEAR | 연도 |
MONTH_OF_YEAR | 월 |
DAY_OF_MONTH | 일 |
DAY_OF_WEEK | 요일 |
AMPM_OF_DAY | 오전 or 오후 |
HOUR_OF_DAY | 시 |
CLOCK_HOUR_OF_DAY | 시(1~24) |
HOUR_OF_AMPM | 시(0~11) |
CLOCK_HOUR_OF_AMPM | 시(1~12) |
MINUTE_OF_HOUR | 분 |
SECOND_OF_MINUTE | 초 |
DAY_OF_YEAR | 해당 연도의 몇 번째 날 (1~365, 윤년이면 366) |
EPOCH_DAY | EPOCH(1970년 1월 1일)을 기준으로 몇 번째 날 |
📌예제
//오전 09:00:00
LocalTime currentTime = LocalTime.now();
String ampm;
if(currentTime.get(ChronoField.AMPM_OF_DAY) == 0) {
ampm = "오전"
} else {
ampm = "오후"
}
System.out.println("현재 시간은" + ampm + currentTime.get(ChronoField.HOUR_OF_AMPM + "시");
//결과
//현재 시간은 오전 9시
'Languages > Java' 카테고리의 다른 글
[Java]함수형 인터페이스(Functional Interface) 사용해보기 (8) | 2023.02.08 |
---|---|
[Java]SecureRandom 클래스를 이용한 임시 비밀번호 생성 방법 (0) | 2023.02.03 |
[Java]toString() 메서드는 왜 만들어졌을까? (7) | 2023.01.30 |
[Java]Map의 요소를 반복하는 다양한 방법 (5) | 2023.01.26 |
[Java]상속(Inheritance)과 super, super() 완벽 이해하기 (3) | 2023.01.19 |