FluidTrack / MOA_garden

Fluid Track Unity Application
MIT License
0 stars 0 forks source link

[BUG] 목표달성 미표기 현상 #91

Closed junhyungmoon closed 3 years ago

junhyungmoon commented 3 years ago

오늘 물을 10잔 이상 마셨는데 목표 달성이라고 안뜨네요ㅠ 그리고 이 페이지도 모아보기와 마찬가지로 이전 버전의 앱에서 기록해두었던 데이터가 안나옵니다~ 이게 실제로는 일어나지 않을 일이라 넘어가자고 할까 생각했는데, 생각해보니 deployment 후에 피치 못한 상황 때문에 사용자들에게 앱 버전 업데이트를 할 일이 생기면 그 때는 문제가 될 수 있을 것 같습니다.

Screenshot_20210825-201812_MOA GARDEN

KimYC1223 commented 3 years ago

문제 해결

모아정원에선 시간을 저장하는 자료형으로

stringTimeHandler의 내부 클래스 DateTimeStamp를 사용합니다.

두 시간을 비교 할 때, stringstring, 또는 DateTimeStampDateTimStamp

서로 비교하는 연산자가 있어 쉽게 비교가 가능하지만,

stringDateTimeStamp를 비교할 땐 한 쪽을 다른 한쪽으로 바꿔줘야 합니다.

DateTimeStampToString()또는 ToDateString()함수로 string으로 바꿀 수 있고,

stringnew DateTimeStamp(string str)과 같은 생성자로 DateTimeStamp로 바꿀 수 있습니다.


여기서 문제가 되는 부분은, 모아 정원내에서 stringDateTimeStamp를 비교하기 위해

DateTimeStampstring으로 바꾸는 과정입니다.

기존의 ToString(), ToDateString()함수는 아래와 같습니다.

override public string ToString() {
    return Years + "-" + Months + "-" + Days + " " +
               Hours + ":" + Minutes + ":" + Seconds;
}

public string ToDateString() {
    return Years + "-" + Months + "-" + Days;
}

보면 단순히 int형 변수들을 string으로 묶고 있기 때문에,

2021년 8월 25일의 ToDateString()결과는 2021-8-25입니다.

하지만 DB에서 전달되는 string은 #85 [Question] 데이터 timestamp sorting 이슈 에서 변경되어

2021-08-25으로 읽히기 때문에,

string이 다르다고 판단, 결과값이 하나도 없다고 판단하는 현상입니다.


해결 코드

해결하기 위해 ToString()ToDateString()을 #85 와 같이 고쳐두었습니다.

override public string ToString() {
    return Years + "-" + (Months/10) + (Months%10) + "-" + (Days/10) + (Days%10) + " " +
            (Hours/10) + (Hours%10) + ":" + (Minutes/10) + (Minutes%10) + ":" + (Seconds/10) + ( Seconds % 10 );
}

public string ToDateString() {
    return Years + "-" + ( Months / 10 ) + ( Months % 10 ) + "-" + ( Days / 10 ) + ( Days % 10 );
}

![Uploading image.png…]()