마니의 공부방/Java

[java] SimpleDateFormat YYYY 사용시 버그관련

알고쓰면 약이고, 모르고 쓰면 독이라 했다.

 

예전 어느 프로젝트에서 2019-12-30일 날짜를 기준으로 아래코드를 실행시키면 202012 로 나오는 상황때문에 주말에 급히 원격작업을 해야했던 적이 있었다.

SimpleDateFormat yyyymm = new SimpleDateFormat("YYYY-MM")

Year와 WeekYear의 차이를 알자

java 1.7기준 SimpleDateFormat 'Date and Time Patterns'를 보면 yyyy와 YYYY는 큰 차이를 보인다.

YYYY는 주 년 (javadoc를 참조)이며, 로케일에 따라서는 1 월 상순 날짜를 사용하는 경우는 과거 1 년 53 주를 12 월 하순 날짜를 사용하는 경우 새해 1 주 눈을 반환 할 수 있습니다.
 

SimpleDateFormat (Java Platform SE 7 )

Parses text from a string to produce a Date. The method attempts to parse text starting at the index given by pos. If parsing succeeds, then the index of pos is updated to the index after the last character used (parsing does not necessarily use all charac

docs.oracle.com

주 단위 component를 사용했을때, 발생하는 문제

365 / 7 = 52.142857....

위와 같은 계산으로 1년은 52.1주이며 53주가 되었을경우 12월 30일 같은 연말이 되었을경우 53주에 들어가므로 다음년으로 계산하는 오류를 발생시킬 수 있다.

 

다른 개발자분들도 기본적으로는 yyyy를 다 사용하시겠지만, 간혹 연말에 이상한 오류가 발생해서 관련내용을 저처럼 찾아보실분들이 계실까하여 :) 

 

기본에 충실하고, 공부하자

항상 기본이 중요한것 같습니다. 저도 요즘 블로그 이웃분들 글보면서 기본부터 착실히 공부하고있습니다 :) 

항상 부족함을 느끼고 노력하는 개발자가 되야지~ ㅎㅎ