Index: RTC.c =================================================================== diff -u -r84ed4e47c26cfec436e32ffe61ef617843d5cd6d -r97e8c6422dcfc36057e990d53e1b2b6cb7abaf8a --- RTC.c (.../RTC.c) (revision 84ed4e47c26cfec436e32ffe61ef617843d5cd6d) +++ RTC.c (.../RTC.c) (revision 97e8c6422dcfc36057e990d53e1b2b6cb7abaf8a) @@ -875,60 +875,46 @@ *************************************************************************/ static BOOL convertEpoch2DateTime( U32 epoch ) { + BOOL result; RTC_TIMESTAMP_T dtTime; U32 i, dayCnt; - U32 days; - U32 fourYears = epoch / SECONDS_IN_4_YEARS; U32 twoYrEpoch = epoch - ( fourYears * SECONDS_IN_4_YEARS ); U32 twoYears = twoYrEpoch / SECONDS_IN_2_YEARS; U32 oneYrEpoch = twoYrEpoch - ( twoYears * SECONDS_IN_2_YEARS ); U32 oneYears = ( twoYears > 0 ? oneYrEpoch / SECONDS_IN_LEAP_YEAR : oneYrEpoch / SECONDS_IN_NORMAL_YEAR ); - U32 remainDays = ( twoYears > 0 ? ( SECONDS_IN_LEAP_YEAR - oneYrEpoch ) / SECONDS_IN_A_DAY : ( SECONDS_IN_NORMAL_YEAR - oneYrEpoch ) / SECONDS_IN_A_DAY ); + U32 days34 = ( oneYears > 0 ? ( oneYrEpoch - SECONDS_IN_LEAP_YEAR ) / SECONDS_IN_A_DAY : oneYrEpoch / SECONDS_IN_A_DAY ); + U32 days12 = ( oneYears > 0 ? ( oneYrEpoch - SECONDS_IN_NORMAL_YEAR ) / SECONDS_IN_A_DAY : oneYrEpoch / SECONDS_IN_A_DAY ); + U32 days = ( twoYears > 0 ? days34 : days12 ); U32 wholeYears = ( fourYears * 4 ) + ( twoYears * 2 ) + oneYears; BOOL leapYear = ( twoYears > 0 && 0 == oneYears ? TRUE : FALSE ); U32 oneDayEpoch = oneYrEpoch % SECONDS_IN_A_DAY; U32 hours = oneDayEpoch / SECS_IN_HOUR; U32 oneHrEpoch = oneDayEpoch - ( hours * SECS_IN_HOUR ); U32 mins = oneHrEpoch / SEC_PER_MIN; U32 secs = oneHrEpoch - ( mins * SEC_PER_MIN ); - - dtTime.years = EPOCH_BASE_YEAR + wholeYears; - dtTime.months = 0; + dtTime.years = EPOCH_BASE_YEAR + wholeYears; + dtTime.months = 0; dayCnt = 0; - - /* - * Adjust days in February and calculate actual day of the - * year based upon whether or not the year is a leap year. - */ - if (leapYear) - { - daysInMonth[ LEAP_YEAR_MONTH ] = 29; - days = DAYS_IN_LEAP_YEAR - remainDays; - } - else - { - daysInMonth[ LEAP_YEAR_MONTH ] = 28; - days = DAYS_IN_NORMAL_YEAR - remainDays; - } - + daysInMonth[ LEAP_YEAR_MONTH ] = ( TRUE == leapYear ? 29 : 28 ); for ( i = 0; i < MONTHS_IN_YEAR; i++ ) { - if ( days > dayCnt ) + if ( days >= dayCnt ) { dtTime.months = i + 1; dtTime.days = days - dayCnt; } dayCnt += daysInMonth[ i ]; } - + dtTime.days += 1; // days will be number of full days in current month so need to add 1 for the partial current day to get day of month dtTime.hours = hours; dtTime.minutes = mins; dtTime.seconds = secs; result = setRTCTimestamp( dtTime.seconds, dtTime.minutes, dtTime.hours, dtTime.days, dtTime.months, dtTime.years ); return result; + } /*********************************************************************//**