Languages/Java

[Java]Java 8 이후의 도입된 현재의 날짜 및 시간 가져오기

MoonSta 2023. 2. 2. 09:43

📌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시