Free Lines Arrow
본문 바로가기
Language/Java

[Java] String to LocalDateTime

by skahn1215 2022. 2. 12.
728x90
반응형

String to TimeStamp

  • String 으로 넘어온 TimeStamp 를 LocalDateTime 으로 변경해보자
  • TimeStamp 의 표현방식은 다양하기 때문에 어떻게 변환을 해야 되는지 알고 있으면 도움이 될것 같다.

 

ISO 8601 

  • 갑자기 ISO 8610? 이걸 먼저 알아야 어떻게 변환하는지 알수 있다.
  • ISO 8601은 날짜와 시간과 관련된 데이터 교환을 다루는 국제 표준이다
  • TimeZone 에 따라 변환방법이 달라지기 때문이다.

 

ISO 의 혼합 표기법

  • 아래 처럼 표현되는 방식이 기본이다 우리가 개발할때 많이 쓰는 방식이다.
<date>T<time> => 2022-12-15T13:00:00.123+09:00
  • date: 날짜
  • T: date 와 Time 을 구별하는 구분자
  • time: 시간

 

ISO 의 TimeZone 표기법

  • +: 기술 중인 시간이 UTC보다 한 시간 앞선다 
  • -: 기술 중인 시간이 UTC보다 한시간 늦다.
  • 참고로 0 은 마이너스를 금지한다.
표기법 예제 설명
<time>Z 13:00:00Z
시간이 UTC인 경우
시간 뒤에 
Z를 직접 추가해야 한다.
Z는 오프셋이 0인 UTC를 위한 지역 지정자(zone designator)다
<time>±hh:mm 13:00:00+01:10
기술된 시간 보다 1시간 10분 앞선다
13:00:00+0110 기술된 시간 보다 1시간 10분 앞선다
13:00:00+01 기술된 시간 보다 1시간 10분 앞선다

 

 

변환 포맷 익히기

  • 위처럼 다양한 포맷 들이 있고 어떻게 포맷에 따라 변환을 해야 되는지 정리해본다.
  • 0900, 09 같은 경우 X로 포맷을 정해준다.
  • 09:00 같은 경우 XXX로 포맷을 정해준다.
  • time.000 같은 경우 SSS로 포맷을 정해준다
T 가 없는 경우
2022-12-15 09:00:00 => yyyy-MM-dd HH:mm:ss
2022-12-15 09:00:00+0900 => yyyy-MM-dd HH:mm:ssX
2022-12-15 09:00:00+09:00 => yyyy-MM-dd HH:mm:ssXXX
2022-12-15 09:00:00.624+09:00 => yyyy-MM-dd HH:mm:ss.SSSXXX

T 가 있는 경우
2022-12-15T09:00:00 => yyyy-MM-dd'T'HH:mm:ss
2022-12-15T09:00:00+0900 => yyyy-MM-dd'T'HH:mm:ssX
2022-12-15T09:00:00+09:00 => yyyy-MM-dd'T'HH:mm:ssXXX
2022-12-15T09:00:00.624+09:00 =>  yyyy-MM-dd'T'HH:mm:ss.SSSXXX

 

예제1: T가 없는 경우 

String strDate1 = "2022-12-15 09:00:00";
DateTimeFormatter pattern1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime parse1 = LocalDateTime.parse(strDate1, pattern1);
System.out.println(strDate1 +" => "+ parse1.toString());

String strDate2 = "2022-12-15 09:00:00+0900";
DateTimeFormatter pattern2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssX");
LocalDateTime parse2 = LocalDateTime.parse(strDate2, pattern2);
System.out.println(strDate2 +" => "+ parse2.toString());

String strDate3 = "2022-12-15 09:00:00+09:00";
DateTimeFormatter pattern3 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssXXX");
LocalDateTime parse3 = LocalDateTime.parse(strDate3, pattern3);
System.out.println(strDate3 +" => "+ parse3.toString());

String strDate4 = "2022-12-15 09:00:00.624+09:00";
DateTimeFormatter pattern4 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSXXX");
LocalDateTime parse4 = LocalDateTime.parse(strDate4, pattern4);
System.out.println(strDate4 +" => "+ parse4.toString());

=====================결과=============================

2022-12-15 09:00:00 => 2022-12-15T09:00
2022-12-15 09:00:00+0900 => 2022-12-15T09:00
2022-12-15 09:00:00+09:00 => 2022-12-15T09:00
2022-12-15 09:00:00.624+09:00 => 2022-12-15T09:00:00.624
반응형

예제1: T가 있는 경우 

String strDate1 = "2022-12-15T09:00:00";
DateTimeFormatter pattern1 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
LocalDateTime parse1 = LocalDateTime.parse(strDate1, pattern1);
System.out.println(strDate1 +" => "+ parse1.toString());

String strDate2 = "2022-12-15T09:00:00+0900";
DateTimeFormatter pattern2 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssX");
LocalDateTime parse2 = LocalDateTime.parse(strDate2, pattern2);
System.out.println(strDate2 +" => "+ parse2.toString());

String strDate3 = "2022-12-15T09:00:00+09:00";
DateTimeFormatter pattern3 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX");
LocalDateTime parse3 = LocalDateTime.parse(strDate3, pattern3);
System.out.println(strDate3 +" => "+ parse3.toString());

String strDate4 = "2022-12-15T09:00:00.624+09:00";
DateTimeFormatter pattern4 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
LocalDateTime parse4 = LocalDateTime.parse(strDate4, pattern4);
System.out.println(strDate4 +" => "+ parse4.toString());

=====================결과=============================

2022-12-15T09:00:00 => 2022-12-15T09:00
2022-12-15T09:00:00+0900 => 2022-12-15T09:00
2022-12-15T09:00:00+09:00 => 2022-12-15T09:00
2022-12-15T09:00:00.624+09:00 => 2022-12-15T09:00:00.624

 

 

 

참고:

https://ko.wikipedia.org/wiki/ISO_8601

 

ISO 8601 - 위키백과, 우리 모두의 백과사전

ISO 8601 Data elements and interchange formats - Information interchange - Representation of dates and times은 날짜와 시간과 관련된 데이터 교환을 다루는 국제 표준이다. 이 표준은 국제 표준화 기구(ISO)에 의해 공포되

ko.wikipedia.org

 

728x90
반응형

'Language > Java' 카테고리의 다른 글

[Java] Generic 제한  (0) 2022.06.21
[Java] Generic 기초  (0) 2022.06.11
[Java] Double의 제한사항  (0) 2021.12.11
[Java] BigDecimal  (2) 2021.12.11
[Java] Generic Type Erasure  (0) 2021.10.29

댓글