isoweek 때문에 삽질

Sunyeop Lee·2022년 3월 1일
0

날짜 데이터를 week of month를 normalize 해서 사용중인 프로젝트가 있었는데 chrono (datetime 라이브러리)에서는 week 관련 api로 isoweek만을 제공하길래 다음과 같이 식을 세웠다.

입력: Y년 M월 D일
출력: Y년 M월 D일이 M월의 몇번째 주에 속하는가?

가정: isoweek(Y년 M월 1일) <= isoweek(Y년 M월 D일)
풀이: isoweek(Y년 M월 D일) - isoweek(Y년 M월 1일) : 0-based week of month (?)

..

이러면 될줄 알고 몇달 동안 잊고 지냈는데, 알고보니 가정이 틀렸다.
예를 들어 입력으로 2019년 12월 30일이 주어진 경우 이 날의 isoweek는 1이다
chrono 구현 문제인가? 하고 알아보니 iso week의 정의가 그렇다.

이 문제로 내 데이터에는 -47이 unsigned로 들어가 18446744073709551569가 되었고, 덕분에 week of month 컬럼의 표준 편차가 떡상해서 normalize 이후 정상 범위의 데이터가 0이 (또는 아주 작은 숫자) 되었다. 그리고 이 비정상적인 데이터를 피팅하느라 엄청난 고생을 했던 내 컴퓨터에게 애도를 표한다..

0개의 댓글