diff options
-rw-r--r-- | xfa/fgas/crt/cfgas_formatstring.cpp | 17 | ||||
-rw-r--r-- | xfa/fgas/crt/cfgas_formatstring_unittest.cpp | 7 |
2 files changed, 16 insertions, 8 deletions
diff --git a/xfa/fgas/crt/cfgas_formatstring.cpp b/xfa/fgas/crt/cfgas_formatstring.cpp index 6e2952a7cc..77dfb45941 100644 --- a/xfa/fgas/crt/cfgas_formatstring.cpp +++ b/xfa/fgas/crt/cfgas_formatstring.cpp @@ -391,9 +391,9 @@ void ResolveZone(FX_TIMEZONE tzDiff, (tzLocale.tzHour < 0 ? -tzLocale.tzMinute : tzLocale.tzMinute); iMinuteDiff -= tzDiff.tzHour * 60 + (tzDiff.tzHour < 0 ? -tzDiff.tzMinute : tzDiff.tzMinute); - while (iMinuteDiff > 1440) - iMinuteDiff -= 1440; - while (iMinuteDiff < 0) + + iMinuteDiff %= 1440; + if (iMinuteDiff < 0) iMinuteDiff += 1440; *wHour = iMinuteDiff / 60; @@ -604,19 +604,20 @@ int32_t GetNumTrailingLimit(const CFX_WideString& wsFormat, return iTreading; } +// |month| is 1-based. e.g. 1 means January. uint16_t GetSolarMonthDays(uint16_t year, uint16_t month) { - if (month % 2) - return 31; if (month == 2) return FX_IsLeapYear(year) ? 29 : 28; - return 30; + if (month == 4 || month == 6 || month == 9 || month == 11) + return 30; + return 31; } uint16_t GetWeekDay(uint16_t year, uint16_t month, uint16_t day) { - uint16_t g_month_day[] = {0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5}; + static const uint16_t month_day[] = {0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5}; uint16_t nDays = (year - 1) % 7 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400; - nDays += g_month_day[month - 1] + day; + nDays += month_day[month - 1] + day; if (FX_IsLeapYear(year) && month > 2) nDays++; return nDays % 7; diff --git a/xfa/fgas/crt/cfgas_formatstring_unittest.cpp b/xfa/fgas/crt/cfgas_formatstring_unittest.cpp index 37fb3e62a4..32bb23b22c 100644 --- a/xfa/fgas/crt/cfgas_formatstring_unittest.cpp +++ b/xfa/fgas/crt/cfgas_formatstring_unittest.cpp @@ -80,6 +80,13 @@ TEST_F(CFGAS_FormatStringTest, DateFormat) { {L"en", L"19990110", L"MMM D, YYYY", L"Jan 10, 1999"}, {L"en", L"19990202", L"J", L"33"}, {L"en", L"19990202", L"JJJ", L"033"}, + {L"en", L"19991231", L"J", L"365"}, + {L"en", L"20001231", L"J", L"366"}, + {L"en", L"19990501", L"J", L"121"}, + {L"en", L"19990901", L"J", L"244"}, + {L"en", L"19990228", L"J", L"59"}, + {L"en", L"20000229", L"J", L"60"}, + {L"en", L"21000501", L"J", L"121"}, {L"en", L"19990102", L"M", L"1"}, {L"en", L"19990102", L"MMM", L"Jan"}, {L"en", L"19990102", L"YYYY G", L"1999 AD"}, |