ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
21 ноября
1532 Топик полностью
John (19.12.2003 04:25, просмотров: 1) ответил DragonS на как подступиться к расчету промежутков времени?
Ответ: N Так можно перевести дату в одно число - дни.
Время перевести в секунды (или минуты - какая нужна точность) Вычесть дни, перевести разность в секунды, прибавить разность секунд.

const unsigned char MonthDays [ 2 ] [ 12 ] =
{
{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
{ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
};

//--------------------------------
// Определим високосность года (только для 21 века!!!)
unsigned char IsLeapYear ( unsigned char Y )
{
if ( Y % 4 ) return ( 0 );
return ( 1 );
} // IsLeapYear

//--------------------------------
// Функция преобразования текущего дня в день, месяц, год.
void DayToDate ( unsigned int D, unsigned char * Day, unsigned char * Mon, unsigned char * Yea )
{
unsigned char L;

D--;
// Определим год
*Yea = D * 4L / ( 365 * 4 + 1 );
// Оставим месяц и день
D = D - *Yea * 365 - ( *Yea - 1 ) / 4;
// Определим месяц
L = IsLeapYear ( *Yea );
*Mon = 0;
while ( D > MonthDays [ L ] [ *Mon ] )
{
D = D - MonthDays [ L ] [ *Mon ];
( *Mon )++;
}
( *Mon )++;
*Day = D;
} // DayToDate

//--------------------------------
// Функция преобразования даты (день, месяц, год ) в текущий день
unsigned int DateToDay ( unsigned char Day, unsigned char Mon, unsigned char Yea )
{
unsigned char i;
unsigned int D = 0;

// Сложим месяцы в текущем годе
if ( Mon - 1 )
{
if ( IsLeapYear ( Yea ) ) for ( i = 0; i < Mon - 1; i++ ) D += MonthDays [ 1 ] [ i ];
else for ( i = 0; i < Mon - 1; i++ ) D += MonthDays [ 0 ] [ i ];
}
return ( Yea * 365 + ( Yea - 1 ) / 4 + D + Day + 1 ); // +1 образовалось от того, что 2000 год високосный
} // DatetoDay