아니 왜 응답 날짜값을 UTC로 주는지 모르겠다 증말. 이런건 그냥 심플하게 심플데이터 포맷으로 yyyyMMddHHmmssSSS로 찍어주면 어디 덧나나? 와 진짜. 아무튼 주는대로 받아먹어야하니 대충 정리해보았다.

 

날짜 형식은 다음과 같다.

2024-06-30T06:42:02.148+00:00

 

대충 찾아보니 UTC 형식의 DateTime으로, Simpledateformat을 기본으로 쓰는 내 시스템과는 근본적으로 달라서 날짜비교나 뭐 그런 기본적인 펑션이 하나도 먹지 않는다. 그래서 변환해서 DB에 넣고 꺼내기로 함.

 

java 1.8, SpringBoot 2.7.8 에서 실행했는데 이정도는 딱히 뭐 버전을 탈 일은 없겠지. 아무튼 잘 동작한다.

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
32
33
34
35
36
37
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.ZoneId;
import java.util.Date;
import java.util.TimeZone;
 
 
/**
 * UTC To SimpleDateFormat
 */
public static String utcToSimpleDateFormat(String utcTime) {
    String simpleDateResult = "";
    
    // UTC 형식을 설정함
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
    
    Date utcDate;
    try {
        utcDate = sdf.parse(utcTime);
        Instant utcInstant = utcDate.toInstant();
        
        // Asia/Seoul 로 타임존 설정, 대소문자에 유의
        ZoneId seoulZone = ZoneId.of("Asia/Seoul");
        Instant seoulInstant = utcInstant.atZone(seoulZone).toInstant();
        
        // 변경할 시간 양식을 설정해주자
        SimpleDateFormat resultStr = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        resultStr.setTimeZone(TimeZone.getTimeZone(seoulZone));
        
        simpleDateResult = resultStr.format(Date.from(seoulInstant));
    } catch (Exception e) {
        e.getMessage();
    }
    
    return simpleDateResult;
}
cs

 

블로그 이미지

김생선

세상의 모든것을 어장관리

,