티스토리 뷰
문자열로 온 text 값을 LocalDateTime으로 parsing 해야 할 작업이 생겼다.
그런데 형식도 보통 yyyyMMddhhmmss 형식이 아니라 밀리세컨드까지 포함된 형식에 yyyy도 아닌 뒤에 yy만 들어오는 형태였다.
Date: 120220 (20/2/2012)
Time: 6150525 (6:15:05.250)
이렇게 들어온다..
첫번째로 yyyy가 아닌 yy부터 날짜까지만 파싱이 되는지 확인해봤다.
LocalDateTime yyMMddhhmmss = LocalDateTime.parse("220811165340", DateTimeFormatter.ofPattern("yyMMddHmmss"));
System.out.println("yyMMddhhmmss = " + yyMMddhhmmss);
//결과: yyMMddhhmmss = 2022-08-11T16:53:40
이건 잘 나온다. 다행이다.
다음에 밀리세컨드까지 넣어서 파싱 하려고 했다.
LocalDateTime yyMMddhhmmssSS = LocalDateTime.parse("22081116534060", DateTimeFormatter.ofPattern("yyMMddHmmssSS"));
System.out.println("yyMMddhhmmssSS = " + yyMMddhhmmssSS);
// Error!
밀리 세컨드까지 파싱하려면 yyMMddhhmmss 뒤에 S를 붙이면 된다고해서 붙였는데 오류..
java.time.format.DateTimeParseException: Text '22081116534060' could not be parsed at index 14
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
at java.time.LocalDateTime.parse(LocalDateTime.java:492)
....
막 찾아보다가 Java8의 오류라는 걸 찾아내었다. Java8에서 DateTimeFormatter의 yyyyMMddHHmmssSSS의 오류가 있어서 아래와 같은 DateTimeFormatter를 새로 만들어서 그걸로 포매터를 적용해야 한다고 한다.
DateTimeFormatter dateTimeFormatter = new DateTimeFormatterBuilder()
.appendPattern("yyMMddHmmss")
.appendValue(ChronoField.MILLI_OF_SECOND, 3)
.toFormatter();
실제로 적용을 해봤다.
(아 그런데 내 상황의 경우 밀리세컨드가 SSS로 안들어오고 SS로 들어오는데..일단 이건 패스.. 테스트는 0을 하나 더 붙였다.)
DateTimeFormatter dateTimeFormatter = new DateTimeFormatterBuilder()
.appendPattern("yyMMddHmmss")
.appendValue(ChronoField.MILLI_OF_SECOND, 3)
.toFormatter();
LocalDateTime yyMMddHmmssSSS = LocalDateTime.parse("220811165340600", dateTimeFormatter);
System.out.println("yyMMddHmmssSSS = " + yyMMddHmmssSSS);
//결과: yyMMddHmmssSSS = 2022-08-11T16:53:40.600
된다. 그런데 가장 쉬운 다른 해결 방법으로는 그냥 java11로 올리면 된다.
(java 11로 올리면 yyMMddHmmssSS 의 형식도 알아서 잘 된다.)
시간이 좀 있으니 서버의 자바 버전을 11로 올려야겠다..!
참고
https://jaimemin.tistory.com/1540
[Java 8] yyyyMMddHHmmssSSS LocalDateTime parse 버그
개요 로그에는 시간을 LocalDateTime 형태로 저장하지만 view에는 yyyy.MM.dd hh:mm:ss 형태로 뿌려줘야 했기 때문에 아래와 같이 LocalDateTime.parse 메서드와 DateTimeFormatter를 적용했습니다. 하지만, 예상..
jaimemin.tistory.com
- Total
- Today
- Yesterday
- springboot
- Mac
- JavaScript
- 오라클
- Spring Security
- mybatis config
- config-location
- Spring
- svn
- LocalDate
- elasticsearch
- maven
- localtime
- input
- rocky
- k8s
- 북리뷰
- LocalDateTime
- mybatis
- window
- oracle
- docker
- Linux
- Bash tab
- intellij
- Kotlin
- jQuery
- Java
- Github Status
- 베리 심플
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |