상세 컨텐츠

본문 제목

[Java] 14. 날짜 시간 포맷

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

by Guroo 2025. 4. 16. 11:09

본문

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

 

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

[Java] 12. 날짜 다루기-1 [Java] 12. 날짜 다루기-1[Java] 11. Stream 마무리-2 [Java] 11. Stream 마무리-2[Java] 10. Stream 마무리-1 [Java] 10. Stream 마무리-1 [Java] 9. 다양한 Stream의 생성 [Java] 9. 다양한 Stream의 생성 [Jav

sesoc.tistory.com

 

지난 스토리에서 하나의 특정 날짜를 생성하고 그 날짜를 기준으로 plus, minus 를 실시하는 메소드에 데해서 알아보았다.

 

이번에는 두 개의 날짜를 비교하는 메소드와 포맷을 하는 메소드를 살펴보자

 

 

 

1. 날짜 비교하기

먼저 두 개의 날짜를 비교하는 메소드가 어떤 것들이 있는지 아래의 표를 확인해보자.

 

메소드 명 설명
isAfter()  인자보다 미래 시간이라면 true 반환
isBefore()  인자보다 과거 시간이면 true 반환
isEqual() 인자와 같은 시간이면 true 반환
compareTo()

compareTo() > 0 : 인자보다 미래 시간
compareTo() < 0 : 인자보다 과거 시간
compareTo() == : 인자와 같은 시간

 

전달인자로 비교할 날짜 타입의 데이터를 전달하여 미래인지 과거인지 살펴볼 수 있다.

아래의 코드를 보면 더욱 잘 이해될 것이다.

 

CompareDate.java

import java.time.LocalDateTime;

public class CompareDate {
    public static void main(String[] args) {
        LocalDateTime koreanWar = LocalDateTime.of(1950, 6, 25, 0, 0, 0);
        LocalDateTime independence = LocalDateTime.of(1945, 8, 15, 0, 0);
        LocalDateTime surrender = LocalDateTime.of(1945, 8, 15, 0, 0);
        
        if (independence.isBefore(koreanWar))
            System.out.println("광복 이후 한국전쟁이 발발하였다. ");
        if (koreanWar.isAfter(independence))
            System.out.println("한국전쟁은 광복 이후에 발발하였다.");
        if (independence.isEqual(surrender))
            System.out.println("일왕의 항복과 대한독립은 같은 날에 일어났다.");
        if (independence.compareTo(surrender) == 0)
            System.out.println("일왕의 항복과 대한독립은 같은 날에 일어났다.");
    }
}

 

 

위의 코드를 실행하면 다음과 같은 결과가 출력된다.

 

광복 이후 한국전쟁이 발발하였다. 
한국전쟁은 광복 이후에 발발하였다.
일왕의 항복과 대한독립은 같은 날에 일어났다.
일왕의 항복과 대한독립은 같은 날에 일어났다.

 


이번에는 날짜시간 객체를 출력하기 위해 포맷을 지정하는 방법을 알아보자. 

 

날짜 시간 데이터를 특정 양식에 맞춰 포맷을 하기 위해서는 몇 개의 정해진 패턴을 이용하면 되는데, 이러한 패턴은 다른 언어의 포맷형식과도 대동소이 하므로 이미 다른 언어에서 포맷기능을 사용해 보았다면 이해하기 쉬울 것이다.

 

패턴 설명
yyyy 년도
MM
dd
HH
mm
ss
SSS 밀리 세컨드

 

위에서 지정한 패턴을 이용하여 출력하기 위해서는 출력형식을 변환할 수 있어야 하는데 그것은 다음의 메소드를 이용하면 된다.

 

한 가지 주의할 것은 월에 해당하는 패턴은 대문자 MM이고 시간의 분에 해당하는 패턴은 소문자 mm 이라는 것 정도이다.

 

  • DateTimeFormatter.ofPattern(String Pattern) 을 사용하면 출력형식을 변환할 수 있다.
    • ofPattern 인자로 "yyyy-MM-dd HH:mm:ss:SSS", "yyyy-MM-dd HH:mm:ss" 등 다양하게 활용할 수 있는데, 이 메소드의 처리 결과를 format() 메소드의 전달인자로 전달하면 된다.
  • String format(DateTimeFormatter formatter) - LocalDateTime의 출력형식을 전달인자로 전달 받은 formatter형태로 변환한 후 문자열로 반환한다.

 

그럼, 코드로 살펴보자.

 

FormatDate.java

public class FormatDate {
    public static void main(String[] args) {

        LocalDateTime localDateTime1 = LocalDateTime.of(2019, 5, 26, 10, 0, 0);
        String format1 = localDateTime1.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
        String format2 = localDateTime1.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS"));
        System.out.println("localDateTime = " + localDateTime1);
        System.out.println("Format1 = " + format1);
        System.out.println("Format2 = " + format2);

        // DateTimeFormat에 등록된 "ISO 8601" 날짜 포맷 사용
        String format3 = localDateTime1.format(DateTimeFormatter.ISO_LOCAL_DATE);
        System.out.println("localDateTime = " + localDateTime1);
        System.out.println("Format3 = " + format3);
    }
}

 

 

위 코드의 실행 결과는 다음과 같다.

 

localDateTime = 2019-05-26T10:00
Format1 = 20190526100000000
Format2 = 2019-05-26 10:00:00:000
localDateTime = 2019-05-26T10:00
Format3 = 2019-05-26

 

 

여기까지 하면 Java 8에서 새롭게 추가된 날짜 시간을 다루는 java.time.* 패키지의 주요 클래스과 관련 패키지를 살펴보았다. 

이전에 제공되었던 Date나 Calendar 클래스의 불편함이 보다 완화되었음을 알 수 있다.

 

다음에는 새롭게 추가된 기능에 대해서 알아보도록 하자!!!

관련글 더보기

댓글 영역