상세 컨텐츠

본문 제목

[Java] 12. 날짜 다루기

프로그래밍 언어/Java(자바)

by Guroo 2025. 4. 16. 09:55

본문

[Java] 11. Stream 마무리-2

 

[Java] 11. Stream 마무리-2

[Java] 10. Stream 마무리-1 [Java] 10. Stream 마무리-1 [Java] 9. 다양한 Stream의 생성 [Java] 9. 다양한 Stream의 생성 [Java] 8. Stream의 개념과 사용 방법-1 [Java] 8. Stream의 개념과 사용 방법-1 [Java] 7. 메소드 참조 (::

sesoc.tistory.com

 

 

날짜와 시간을 다루기 위해 JDK 8에 추가된 클래스로 LocalDate, LocalTime, LocalDateTime, LocalTime 클래스가 있다.

 

이 Localxxx라는 이름의 클래스가 추가되기 전에는 java.util.* 패키지 내에 있는 Date클래스와, Calendar, GregorianCalendar 클래스가 있었는데 JDK 에서 새롭게 설계된 java.time 패키지를 도입하였다.

 

이 두개의 클래스의 사용이 더 이상 권장되지 않는 것은

  • Date 클래스의 모호성
  • Calendar 클래스의 복잡성
  • Mutable한 특징
  • 날짜와 시간 관련 작업을 수행하는 다양한 메서드들의 이름이나 파라미터 반환 값등 API 일관성 부족

등의 이유가 있다.

 

이번에는 Java 8 이후 개선되어 도입된 java.time 패키지 내의 날짜 다루는 클래스를 다루어 보도록 하겠다.

 

12-1. 날짜 관련 클래스들

  • LocalDate: 날짜 정보를 나타내기 위해서 사용
  • LoclaTime: 시간 정보를 나타내기 위해서 사용
  • LocalDateTime: 날짜와 시간 정보 모두를 나타내기 위해 사용. 

 

LocalDate, LocalTime, LocalDateTime 클래스는 날짜와 시간을 다루는 가장 기본이 되는 클래스이고, 
new 키워드를 통해 직접적인 인스턴스 생성이 불가능하, 아래의 static 메소드 이용하는 방식을 사용한다.

 

메소드 명 설명
now() 현재 날짜, 시간에 기반하여 인스턴스 생성
of() 인자로 전달되는 특정 날짜, 시간에 기반한 인스턴스 생성
atXXXX() 특정 시간정보에 기반해 LocalDate. LocalTime, LocalDateTime 인스턴스 생성

 

위 표에서 설명한 메소드를 좀더 자세히 살펴보자

 

메소드 명 설명
static LocalDateTime now() 현재 로컬 컴퓨터의 날짜와 시간을 반환
static LocalDateTime now(Clock clock)  Clock에 맞는 현재 날짜와 시간을 반환
static LocalDateTime now(ZoneId zone) ZoneId에 해당하는 날짜 시간을 반환
ZoneId를 넘기면 Zone에 해당하는 현재 시간을 반환
ex) 태평양 표준시: America/Los_Angeles, 일본 표준시: JST
static LocalDateTime of
    (int year, int month, int
dayOfMonth,
     int hour, int minute)
, , , , 분 값을 전달하여 LocalDateTime 객체 생성
static LocalDateTime of
    (int year, int month, int
dayOfMonth,

     int hour, int minute, int second)
, , , , , 초 값을 전달하여 LocalDateTime 객체 생성
static LocalDateTime of
    (int year, int month, int dayOfMonth,
     int hour, int minute, int second,
     int
nanoOfSecond)
, , , , , , 나노초값을 전달하여 LocalDateTime 객체 생성

 

 

위 표에서 설명된 .static. 메소드를 이용하여 날짜 타입의 데이터를 생성하는 코드를 살펴보자

먼저, now() 메소드와 of() 메소드를 이용한 날짜 데이터의 생성벙법이다.

 

now() 메소드는 전달인자 없이 사용하며

of(int, int, int) 메소드로 날짜를 생성할 때에는 3개의 전달인자를 년, 월, 일의 순서대로 입력하고,

of(int, int, int) 메소드로  시간을 생성할 때에는 3개의 전달인자를 시, 분, 초의 순서대로 입력해서 생성할 수 있다.

 

 

FirstMakeDate.java

public class FirstMakeDate {
    public static void main(String[] args) {
        LocalDate d1 = LocalDate.now();
        LocalDate d2 = LocalDate.of(2025, 4, 1);

        LocalTime t1 = LocalTime.now();
        LocalTime t2 = LocalTime.of(15, 20, 20);

        System.out.printf("LocalDate.now() : %s\n", d1);
        System.out.printf("LocalDate.of(2025, 1, 1) : %s\n", d2);
        System.out.printf("LocalTime.now() : %s\n", t1);
        System.out.printf("LocalTime.of(15, 20, 20) : %s\n", t2);

        LocalDateTime dt1 = LocalDate.now().atTime(LocalTime.MIDNIGHT);
        LocalDateTime dt2 = LocalDate.now().atTime(LocalTime.MAX);

        System.out.printf("LocalDate.now().atTime(LocalTime.MIDNIGHT) : %s\n", dt1);
        System.out.printf("LocalDate.now().atTime(LocalTime.MAX) : %s\n", dt2);
    }
}

 

< 실행 결과 >

LocalDate.now() : 2025-04-16
LocalDate.of(2025, 1, 1) : 2025-04-01
LocalTime.now() : 09:42:04.153603300
LocalTime.of(15, 20, 20) : 15:20:20
LocalDate.now().atTime(LocalTime.MIDNIGHT) : 2025-04-16T00:00
LocalDate.now().atTime(LocalTime.MAX) : 2025-04-16T23:59:59.999999999

 

다음 예제도 살펴보자

 

SecondMakeDate.java

public class SecondMakeDate {
    public static void main(String[] args) {
        // now()
        LocalDateTime time1 = LocalDateTime.now();
        LocalDateTime time2 = LocalDateTime.now(Clock.systemDefaultZone());
        LocalDateTime time3 = LocalDateTime.now(ZoneId.of("Asia/Seoul")); // of()
        LocalDateTime time4 = LocalDateTime.of(2019, 1, 15, 0, 0, 0);
        LocalDateTime time5 = LocalDateTime.of(LocalDate.now(), LocalTime.now());

        // parse()
        LocalDateTime independent = LocalDateTime.parse("1945-08-15T15:36:00.000");
        System.out.println("광복절 일왕 방송: " + independent);

        LocalDateTime xmas = LocalDateTime.of(2025, 12, 25, 0, 0, 0);
        System.out.println("2025년 Christmas: " + xmas);

        // at()
        LocalDateTime vote = Year.of(2025).atMonth(6).atDay(3).atTime(9, 00);
        System.out.println("대통령 선거일:" + vote);

        LocalDateTime time7 = LocalDate.now().atTime(10, 30);
        LocalDateTime time6 = Year.of(2024).atMonth(1).atDay(15).atTime(10, 30);
    }
}

 

위의 코드에서 살펴보면 알 수 있듯 날짜 객체를 생성하는 작업   매우 간단하다.

 

이번에는 날짜를 생성하는 방법을 살펴보았는데, 다음에는 날짜와 관련된 메소드가 어떤 것들이 있는지 살펴보도록 하자.

 

 

 


다음 글: [Java] 13. 날짜와 시간 관련 연산 메소드

관련글 더보기

댓글 영역