어제 오늘 내일

[Java] 문자열을 날짜로 변환하기 (Date, LocalDateTime) 본문

IT/Java

[Java] 문자열을 날짜로 변환하기 (Date, LocalDateTime)

hi.anna 2021. 6. 19. 06:51

 

지난번에는 Java API를 이용하여 현재 날짜, 시간을 구하는 방법을 알아보았습니다.

[Java] 현재 날짜, 현재 시간 구하기

 

여러가지 방법이 있지만, 

Java 8 이전에는 Date, Calendar, 포맷터로는 SimpleDateFormat 

Java 8 이후에는 LocalDate, LocalTime, LocalDateTime, 포맷터로는 DateTimeFormatter를

사용한다고 하였습니다.

 

이번에는

  • SimpleDateFormat 클래스를 이용하여, 문자열을 Date 객체로 바꾸는 방법
  • DateTimeFormatter 클래스를 이용하여, 문자열을 LocalDateTime 객체로 바꾸는 방법

을 소개합니다.

 

 

String -> Date

Date 객체를 포맷팅하여 출력하기 위해 SimpleDateFormat 클래스를 사용했던 것과 마찬가지로,

문자열을 포맷에 맞추어 읽어들인 다음, Date 객체로 변환할 때도, SimpleDateFormat 클래스를 사용합니다.

 

  예제  

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class StringToDate {
    public static void main(String[] args) throws ParseException {

        // 문자열
        String dateStr = "2021년 06월 19일 21시 05분 07초";

        // 포맷터
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy년 MM월 dd일 HH시 mm분 ss초");

        // 문자열 -> Date
        Date date = formatter.parse(dateStr);

        System.out.println(date); // Sat Jun 19 21:05:07 KST 2021
    }
}

SimpleDateFormat formatter = new SimpleDateFormat("yyyy년 MM월 dd일 kk시 mm분 ss초");

SimpleDateFormat 클래스를 이용하여,

문자열을 어떻게 parsing하여 읽어들일지 정의합니다.

파라미터 문자열에 사용된 yyyy, MM, dd, kk, mm, ss는

포맷에 맞추어 읽어들인 문자가 어떤 의미인지를 나타냅니다.

그 의미는 다음의 Java 공식 문서를 참조하세요.

https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html

 

SimpleDateFormat (Java Platform SE 8 )

Parses text from a string to produce a Date. The method attempts to parse text starting at the index given by pos. If parsing succeeds, then the index of pos is updated to the index after the last character used (parsing does not necessarily use all charac

docs.oracle.com

 

Date date = formatter.parse(dateStr);

SimpleDateFormat 클래스의 parse() 메소드는

파라미터로 받은 문자열을 포맷에 맞추어 읽어서

Date 타입의 객체를 리턴합니다.

 

 

 

String -> LocalDateTime

LocalDateTime을 원하는 포맷으로 출력하기 위해, DateTimeFormatter 클래스를 이용했던 것과 같이,

문자열을 LocalDateTime으로 변경할 때도,

문자열을 포맷에 맞추어 읽어들이기 위해 DateTimeFormatter 클래스를 사용합니다.

 

  예제  

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

public class StringToDate {
    public static void main(String[] args) throws ParseException {

        // 문자열
        String dateStr = "2021년 06월 19일 21시 05분 07초";

        // 포맷터
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm분 ss초");

        // 문자열 -> Date
        LocalDateTime date = LocalDateTime.parse(dateStr, formatter);

        System.out.println(date); // 2021-06-19T21:05:07
    }
}

 

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm분 ss초");

DateTimeFormatter로 문자열을 읽어들일 포맷을 지정합니다.

파라미터로 전달된 문자열에 사용된 'yyyy, MM, dd, HH, mm, ss'의 의미는 

오라클의 공식 문서를 참조하세요.

 

https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html

 

DateTimeFormatter (Java Platform SE 8 )

Parses the text using this formatter, without resolving the result, intended for advanced use cases. Parsing is implemented as a two-phase operation. First, the text is parsed using the layout defined by the formatter, producing a Map of field to value, a

docs.oracle.com

 

LocalDateTime date = LocalDateTime.parse(dateStr, formatter);

LocalDateTime.parse() 메소드에

LocalDateTime으로 변환할 문자열과

formatter를 전달하여 문자열을 LocalDateTime 타입의 객체로 변환하였습니다.

 


 

문자열을 Date, LocalDateTime 객체로 변환하는 방법을 알아보았습니다.

Java 8 이상을 사용한다면, Date 클래스 보다는, LocaDateTime 클래스 사용을 권장합니다.

또한, 문자열을 LocalDate, LocalTime 형태로 변환할 수도 있고,

문자열을 LocalDateTime으로 바꾸는 방법과 비슷한 방법으로 

문자열을 LocalDate, LocalTime 객체로 바꿀 수 있습니다.

 

 

 

반응형
Comments