Java

[Java] 날짜 및 시간 API (Date and Time API) 사용 방법

cob 2023. 5. 30. 10:17

 

Java 8에서는 java.time 패키지가 추가되어 날짜와 시간을 다루는 API를 제공한다. 이 API는 이전의 java.util.Date 및 java.util.Calendar 클래스보다 사용하기 쉽고, 더 정확하고 기능을 제공하고있다.

 

 

 


1. java.time 제공 클래스

클래스 설명
LocalDate 날짜를 표현하는 클래스로, 연, 월, 일 정보만 포함
LocalTime 시간을 표현하는 클래스로, 시, 분, 초, 밀리초 정보만 포함
LocalDateTime 날짜와 시간을 모두 포함하는 클래스로, LocalDate와 LocalTime의 조합
Instant 기계적인 시간의 흐름을 나타내는 클래스로, 에포크부터 경과한 시간 표현
Duration 두 시간 간의 지속 시간을 나타내는 클래스로, 시간 기반의 간격 표현
Period 두 날짜 간의 지속 기간을 나타내는 클래스로, 날짜 기반의 간격 표현
DateTimeFormatter 날짜와 시간을 포맷팅하고 파싱하기 위한 클래스

 

 

 

 


2. 사용 방법

2-1) LocalDate 클래스

import java.time.LocalDate;

public class LocalDateExample {
    public static void main(String[] args) {
        LocalDate currentDate = LocalDate.now();
        System.out.println("Current Date: " + currentDate);
        // Current Date: 2023-05-30

        LocalDate specificDate = LocalDate.of(2023, 5, 30);
        System.out.println("Specific Date: " + specificDate); 
        // Specific Date: 2023-05-30

        LocalDate parsedDate = LocalDate.parse("2023-05-30");
        System.out.println("Parsed Date: " + parsedDate); 
        // Parsed Date: 2023-05-30
    }
}
메서드 설명
of(int year, int month, int dayOfMonth) 지정된 연, 월, 일로 LocalDate 객체를 생성합니다.
now() 현재 시스템 시간으로 LocalDate 객체를 생성합니다.
getYear() 연도를 반환합니다.
getMonth() 월을 반환합니다.
getDayOfMonth() 월의 일을 반환합니다.

 

 

2-2) LocalTime 클래스

import java.time.LocalTime;

public class LocalTimeExample {
    public static void main(String[] args) {
        LocalTime currentTime = LocalTime.now();
        System.out.println("Current Time: " + currentTime); 
        // Current Time: 10:30:45.123456789

        LocalTime specificTime = LocalTime.of(12, 30, 45);
        System.out.println("Specific Time: " + specificTime); 
        // Specific Time: 12:30:45

        LocalTime parsedTime = LocalTime.parse("15:45:30");
        System.out.println("Parsed Time: " + parsedTime); 
        // Parsed Time: 15:45:30
    }
}

 

메서드 설명
of(int hour, int minute) 지정된 시, 분으로 LocalTime 객체를 생성합니다.
now() 현재 시스템 시간으로 LocalTime 객체를 생성합니다.
getHour() 시를 반환합니다.
getMinute() 분을 반환합니다.
getSecond() 초를 반환합니다.

 

 

 

2-3) LocalDateTime 클래스

시간대에 독립적인 지역적인 날짜와 시간을 표현해야 할 때, LocalDateTime 클래스를 사용한다. 예를 들어 예약된 이벤트의 날짜와 시간, 생일, 회의 시간 등을 나타낼 때 유용하다. 또한, 날짜와 시간을 표현하고 연산하는 데 다양한 메서드와 기능을 제공해 날짜와 시간의 조작, 포맷팅, 파싱 등을 수행할 때 사용할 수 있다.
import java.time.LocalDateTime;

public class LocalDateTimeExample {
    public static void main(String[] args) {
        LocalDateTime currentDateTime = LocalDateTime.now();
        System.out.println("Current Date and Time: " + currentDateTime); 
        // Current Date and Time: 2023-05-30T10:30:45.123456789

        LocalDateTime specificDateTime = LocalDateTime.of(2023, 5, 30, 12, 30, 45);
        System.out.println("Specific Date and Time: " + specificDateTime); 
        // Specific Date and Time: 2023-05-30T12:30:45

        LocalDateTime parsedDateTime = LocalDateTime.parse("2023-05-30T15:45:30");
        System.out.println("Parsed Date and Time: " + parsedDateTime); 
        // Parsed Date and Time: 2023-05-30T15:45:30
    }
}
  • 시간대 : 시간대 정보가 없어 독립적인 날짜와 시간을 나타낸다.
  • 기준점 : 날짜와 시간의 기준점은 없으며, 지정된 날짜와 시간만을 나타낸다.
  • 정밀도 : 초 이하의 정밀도를 갖지 않고, 시간은 최대 나노초까지 지원된다.
메서드 설명
of(int year, int month, int dayOfMonth, int hour, int minute) 지정된 연, 월, 일, 시, 분으로 LocalDateTime 객체를 생성합니다.
now() 현재 시스템 시간으로 LocalDateTime 객체를 생성합니다.
getYear() 연도를 반환합니다.
getMonth() 월을 반환합니다.
getDayOfMonth() 월의 일을 반환합니다.
getHour() 시를 반환합니다.
getMinute() 분을 반환합니다.
getSecond() 초를 반환합니다.

 

 

2-4) Instant 클래스

시스템의 현재 시간을 얻어 타임스탬프로 사용해야 할 때, Instant 클래스를 사용한다. Instant는 UTC를 기준으로 한 시간의 흐름을 나타내므로, 타임스탬프를 표현하는 데 적합하다. 또한, 두 시간 사이의 경과 시간을 계산해야 할 때, Instant 클래스와 Duration 클래스와 함께 사용하여 두 Instant 객체 간의 시간 간격을 계산할 수 있다.
import java.time.Instant;

public class InstantExample {
    public static void main(String[] args) {
        Instant currentInstant = Instant.now();
        System.out.println("Current Instant: " + currentInstant); 
        // Current Instant: 2023-05-30T10:30:45.123456789Z

        Instant specificInstant = Instant.ofEpochSecond(1622380800);
        System.out.println("Specific Instant: " + specificInstant); 
        // Specific Instant: 2021-05-30T00:00:00Z
    }
}
  • 시간대 : UTC(협정 세계시)를 기준으로 한 시간의 흐름을 나타낸다.
  • 기준점 : 에포크(1970-01-01 00:00:00 UTC)를 기준으로 한 시간의 경과를 초 단위로 나타낸다.
  • 정밀도 : 나노초 단위까지 정밀도를 갖는다.
메서드 설명
ofEpochSecond(long epochSecond) 지정된 초로 Instant 객체를 생성합니다.
now() 현재 시스템 시간으로 Instant 객체를 생성합니다.
getEpochSecond() 에포크 이후의 초를 반환합니다.
getNano() 나노초를 반환합니다.

 

 

 

2-5) Duration 클래스

import java.time.Duration;
import java.time.LocalTime;

public class DurationExample {
    public static void main(String[] args) {
        LocalTime startTime = LocalTime.of(9, 0);
        LocalTime endTime = LocalTime.of(12, 30);

        Duration duration = Duration.between(startTime, endTime);
        long hours = duration.toHours();
        long minutes = duration.toMinutes() % 60;

        System.out.println("Duration: " + hours + " hours " + minutes + " minutes");
        // Duration: 3 hours 30 minutes
    }
}
메서드 설명
between(Temporal startInclusive, Temporal endExclusive) 두 시간 사이의 지속 시간을 계산합니다.
toSeconds() 지속 시간을 초로 반환합니다.
toMinutes() 지속 시간을 분으로 반환합니다.
toHours() 지속 시간을 시간으로 반환합니다.

 

 

 

2-6) Period 클래스

import java.time.LocalDate;
import java.time.Period;

public class PeriodExample {
    public static void main(String[] args) {
        LocalDate startDate = LocalDate.of(2023, 1, 1);
        LocalDate endDate = LocalDate.of(2023, 12, 31);

        Period period = Period.between(startDate, endDate);
        int years = period.getYears();
        int months = period.getMonths();
        int days = period.getDays();

        System.out.println("Period: " + years + " years " + months + " months " + days + " days");
        // Period: 0 years 11 months 30 days
    }
}
메서드 설명
between(LocalDate startDateInclusive, LocalDate endDateExclusive) 두 날짜 사이의 지속 기간을 계산합니다.
getYears() 연 수를 반환합니다.
getMonths() 월 수를 반환합니다.
getDays() 일 수를 반환합니다.

 

 

2-7) DateTimeFormatter 클래스 

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class DateTimeFormatterExample {
    public static void main(String[] args) {
        LocalDateTime currentDateTime = LocalDateTime.now();

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String formattedDateTime = currentDateTime.format(formatter);
        System.out.println("Formatted DateTime: " + formattedDateTime); 
        // Formatted DateTime: 2023-05-30 10:30:45

        String dateTimeString = "2023-05-30 15:45:30";
        LocalDateTime parsedDateTime = LocalDateTime.parse(dateTimeString, formatter);
        System.out.println("Parsed Date and Time: " + parsedDateTime); 
        // Parsed Date and Time: 2023-05-30T15:45:30
        
        
        // 오전,오후 언어 변경
        DateTimeFormatter.ofPattern("a HH시 mm분").withLocale(Locale.forLanguageTag("ko"))
    }
}
메서드 설명
ofPattern(String pattern) 지정된 패턴으로 DateTimeFormatter 객체를 생성합니다.
format(TemporalAccessor temporal) 날짜 및 시간을 지정된 형식으로 포맷팅합니다.
parse(CharSequence text) 문자열을 날짜 및 시간으로 파싱합니다.
withLocale(Locale locale) 사용할 로케일을 설정합니다.

 

 

반응형