프로그래밍/기타

LocalDateTime의 약간 이상한 시간 표시

2jun0 2023. 2. 22. 22:43

RealWorld Postman 테스트 코드를 보면 게시글관련에 아래와 같은 테스트 코드가 들어있다.

pm.test('Article\'s "updatedAt" property is an ISO 8601 timestamp', () => {
    pm.expect(/^\d{4,}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d.\d+(?:[+-][0-2]\d:[0-5]\d|Z)$/.test(article.updatedAt)).to.be.true
})

ISO 8601 포맷의 타임스탬프인지 확인하는 코드로, ISO 8601포맷은 아래에 자세히 설명되어 있다.

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

 

대략, 아래와 같은 양식으로 되어있다.
2016-10-27T17:13:40Z
1. 년, 월, 일은 "-"로 구분해 표현한다.
2. 시각은 "T"이후에 시, 분, 초를 ":"로 구분해 표현한다.
3. 시각은 소수로 표현될 수 있다. 다만, 10시 31분을 10.5:1로 표현하면 좋지 않다.
4. UTC시각을 표기하려면 끝에 Z를 붙인다.

 

그런데 자바의 LocalDateTime::toString()은 약간 다르게 출력한다.

예컨데 2023-02-22T18:05:23.314746Z

Z빼고 2023-02-22T18:05:23.314746로 표시하는 식이다.

 

고로, 위의 테스트를 통과할 수 없게된다.

 

해결.

결국, 정규식 뒷쪽의 UTC 시간 표기가 없는 것도 허용하도록 변경했다.

pm.test('Article\'s "createdAt" property is an ISO 8601 timestamp', () => {
    pm.expect(/^\d{4,}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d.\d+(?:[+-][0-2]\d:[0-5]\d|Z)?$/.test(article.createdAt)).to.be.true
})