[an error occurred while processing this directive]
Ответ:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
миниатюрный аудио-видеорекордер mAVR

Отправлено dimoniche 11 июля 2002 г. 16:13
В ответ на: Нужен алгоритм пересчета mm:hh:ss в секунды и обратно относительно нового года. отправлено Sergey Pinigin 11 июля 2002 г. 15:50

#define visocosn(year) ((year % 4) ? 0 : 1)

typedef struct
{
uchar ucSec; //00-59
uchar ucMin; //00-59
uchar ucHour; //00-23

uchar ucDay; //01-31
uchar ucMonth; //01-11
uchar ucYear; //00-99
}RTC_DATA;

//перевод числа секунд с 1 января 1970 года в параметры структуры RTC_DATA.

void Sec2Date(RTC_DATA *pDest, ulong ulSec)
{
ulong dl;

if ( ulSec >= 946684800L ) {
ulSec -= 946684800L; //Дата после 1.01.2000
pDest->ucYear = 0;
}//if( )
else {
pDest->ucYear = 70;//Дата до 1.01.2000
}//else ( )

for ( dl = 365L;
ulSec >= (dl = 86400L * (365L + visocosn(pDest->ucYear))) ;
ulSec -= dl, pDest->ucYear++ );

for ( pDest->ucMonth = 1;
ulSec >= ( dl = 86400L *
(mon_len[pDest->ucMonth - 1] + ((pDest->ucMonth == 2) ?
visocosn(pDest->ucYear) : 0))); ulSec -= dl, pDest->ucMonth++);

pDest->ucDay = ulSec / (86400L) + 1;
ulSec %= 86400L;
pDest->ucHour = ulSec / 3600L;
ulSec %= 3600L;
pDest->ucMin = ulSec / 60L;
ulSec %= 60L;
pDest->ucSec = ulSec;
}


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru