반응형
문제 상황
- String 으로 된 날짜 값을 ZonedDateTime 으로 변환하고자 했다.
- "20240405183955" ==> 2024-04-05 18:39:55
코드
- ZonedDateTime 에서 제공하는 parse 메소드로 바로 변환하고자 했다.
fun from(datetime: String, formatter: DateTimeFormatter): ZonedDateTime {
return ZonedDateTime.parse(datetime, formatter)
}
테스트 코드
@Test
@DisplayName("시간과 포매터를 제공하면 ZonedDateTime 으로 변환할 수 있다.")
fun fromTest() {
// given
val datetime = "20240405183955"
val formatter = ZonedDateTimeUtils.yyyyMMddHHmmss
val expected = ZonedDateTime.of(
2024, 4, 5, 18,39,55,0,ZoneId.systemDefault()
)
// when
val actual = ZonedDateTimeUtils.from(datetime, formatter)
// then
assertEquals(expected, actual)
}
에러 메시지
- 테스트 코드가 실패하며 아래와 같은 에러 메시지가 나왔다.
java.time.format.DateTimeParseException:
Text '20240405183955' could not be parsed:
Unable to obtain ZonedDateTime from TemporalAccessor:
{},ISO resolved to 2024-04-05 18:39:55 of type java.time.format.Parsed
해결
- ZonedDateTime 의 경우에는 타임존 데이터가 있어야한다.
- 따라서 타임존이 없는 String 날짜 데이터는 바로 변환할 수 없다.
- LocalDateTime 으로 변환하고, 타임존을 직접 넣어주도록 하자.
fun from(datetime: String, formatter: DateTimeFormatter): ZonedDateTime {
val localDateTime = LocalDateTime.parse(datetime, formatter)
return ZonedDateTime.of(localDateTime, ZoneId.systemDefault())
}
반응형
'에러 핸들링' 카테고리의 다른 글
ssh: connect to host github.com port 22: Operation timed out (0) | 2023.05.04 |
---|---|
Port 8080 was already in use (feat. 8080 포트 죽이기) (0) | 2023.04.03 |
Config data resource ... via location ... does not exist (0) | 2023.03.08 |
UUID 로 설계한 댓가 (0) | 2023.02.23 |
ArithmeticException 해결하기 (0) | 2023.02.12 |
댓글