ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • getBaseDate 버그 fix
    프로젝트 기록/내날씨(OwnWeather) 2023. 7. 27. 00:04

    *본 글을 과거에 작성한 글을 저장하기 위해 작성됐습니다(23.05.23)

    문제

    새벽 1시 쯤 테스트겸 앱을 실행시켜보고 있는데 아예 단기 예보가 조회되지 않는 상황이 발생했다.

    아직 네트워킹 타임아웃에 대한 처리를 해주지않아서 앱이 종료되면 타임아웃이고 앱이 종료되지 않으면 그 외 문제이다.(이유는 모르겠지만 기상청 api를 안드로이드에서 호출하면 타임아웃이 생각보다 꽤 자주 발생한다. 웹에서 주소로 직접 접속하면 안그런데ㅠ)

    그래서 unitTest에서 확인해봤는데 바로 문제를 찾아냈다.

    현재 날짜와 시간이 20230523 0131 이라면 20230522 2300 이 되어야 하는데 20230523 2300이 됐다.

    baseTime이 하루전이 되지 않은게 문제 였는데 그 이유는 다음과 같았다.

    이유

    빨간색 사각형속 코드는 baseTime은 2300이지만 현재 시간이 2300이 아니라면 날짜를 하루 전으로 돌리는 코드다.(날짜는 지났지만 baseTime은 각자 조건에 의해 하루전의 23시이기 때문에 날짜도 시간에 맞게 하루전으로 돌려줘야 하기 때문에)

    이 때 문제가 생긴 부분은 노란색 사각형 부분이다. 날짜를 하루전으로 돌리는 방법으로 한시간치 밀리초를 빼는 방식을 사용했는데 초단기실황과 초단기 예보는 00시 40분, 45분 이후로는 baseTime도 00시가 되기 때문에 잘 적용이 됐다.

    하지만 단기예보의 경우 2시까지 baseTime이 전날 23시가 되는데 1시가 넘어가면 한시간을 빼도 날짜가 하루전이 되지 않기 때문이었다.

    해결

    결과적으로는 한 시간이 아니라 세 시간을 빼는 방식으로 해결했다.

    Date 객체에서 하루를 빼거나 하는 방식을 사용하려 했으니 Long 타입의 currentTime을 사용하기 때문에 Date타입을 활용하려면 굳이 한단계를 더 거쳐야 했기 때문에 위의 방법이 제일 간결했다.

Designed by Tistory.