Fixed bug number 9763.

This commit is contained in:
xiaojiazhu 2023-12-08 17:56:01 +08:00
parent ccec0201e2
commit ac74e6d5db

View File

@ -1045,7 +1045,36 @@ void Option_Operating_Time_Key(lv_obj_t* obj, uint32_t key)
break;
}
}
UINT16 sf_get_month_days(UINT16 year, UINT16 month)
{
UINT16 maxday = 0;
printf("sf_get_month_days year=%d, month=%d\n", year, month);
switch(month)
{
case 4:
case 6:
case 9:
case 11:
maxday = 30;
break;
case 2:
if ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)))
maxday = 29;
else
maxday = 28;
break;
default:
maxday = 31;
break;
}
printf("maxday=%d\n", maxday);
return maxday;
}
// --------------------------------------------------------------------------
// DateTime
// --------------------------------------------------------------------------
@ -1084,7 +1113,10 @@ static void update_DateTime_Time_msg(lv_obj_t* obj)
DBG_ERR("DateTime component is not initialized");
return;
}
if (gDateTime.Day > sf_get_month_days(gDateTime.Year, gDateTime.Mon))
{
gDateTime.Day = sf_get_month_days(gDateTime.Year, gDateTime.Mon);
}
// UIMenuStoreInfo *puiPara = sf_ui_para_get();
snprintf(DateTimeMOBuf, 3, "%02d", gDateTime.Mon);
snprintf(DateTimeDDBuf, 3, "%02d", gDateTime.Day);
@ -1242,10 +1274,10 @@ void Option_DateTime_Key(lv_obj_t* obj, uint32_t key)
}
else if(DateTimeIndex == 2)
{
if(gDateTime.Day > 1 && gDateTime.Day <= 31)
if(gDateTime.Day > 1 && gDateTime.Day <= sf_get_month_days(gDateTime.Year, gDateTime.Mon))
gDateTime.Day--;
else
gDateTime.Day = 31;
gDateTime.Day = sf_get_month_days(gDateTime.Year, gDateTime.Mon);
}
else if(DateTimeIndex == 4)
{
@ -1287,7 +1319,7 @@ void Option_DateTime_Key(lv_obj_t* obj, uint32_t key)
}
else if(DateTimeIndex == 2)
{
if(gDateTime.Day >= 31)
if(gDateTime.Day >= sf_get_month_days(gDateTime.Year, gDateTime.Mon))
gDateTime.Day = 1;
else
gDateTime.Day++;
@ -1360,10 +1392,10 @@ void Option_DateTime_Key_Long_Press(lv_obj_t* obj, uint32_t key)
}
else if(DateTimeIndex == 2)
{
if(gDateTime.Day > 0 && gDateTime.Day <= 31)
if(gDateTime.Day > 0 && gDateTime.Day <= sf_get_month_days(gDateTime.Year, gDateTime.Mon))
gDateTime.Day--;
else
gDateTime.Day = 31;
gDateTime.Day = sf_get_month_days(gDateTime.Year, gDateTime.Mon);
}
else if(DateTimeIndex == 4)
{
@ -1405,7 +1437,7 @@ void Option_DateTime_Key_Long_Press(lv_obj_t* obj, uint32_t key)
}
else if(DateTimeIndex == 2)
{
if(gDateTime.Day >= 31)
if(gDateTime.Day >= sf_get_month_days(gDateTime.Year, gDateTime.Mon))
gDateTime.Day = 0;
else
gDateTime.Day++;