Hola gente del foro, tengo un dilema a ver si me pueden dar una mano.
En un sistema necesitaba realizar los calculos para obtener:
-De una fecha (dia mes año), la cantidad de dias que significa.
-De una cantidad de dias especifica, la fecha en dia mes año.
Los algoritmos los tengo, son estos:
De fecha (en un entero representado por ejemplo 1/10/2007 en 11007) a dias
long TIMER_FECHA_A_DIA (long TIMER_DMA)
{long TIMER_ANO,TIMER_MES,TIMER_DIA;
TIMER_0_H_M_S(TIMER_DMA,&TIMER_DIA,&TIMER_MES,&TIMER_ANO);//Tomo por separado el dia mes y año
TIMER_ANO+=2000; //Tomo años a partir del 2000 solamente!!!!
TIMER_MES=(TIMER_MES+9)%12;
TIMER_ANO=TIMER_ANO-(TIMER_MES/10);
TIMER_DIA=TIMER_DIA+(365*TIMER_ANO)+(TIMER_ANO/4)-(TIMER_ANO/100)+(TIMER_ANO/400)+((TIMER_MES*306 + 5)/10)-1;
return TIMER_DIA;
}
Y aca es donde viene el problema, de dia a fecha
long TIMER_DIA_A_FECHA (long TIMER_DIAS)
{long TIMER_ANO,TIMER_MES,TIMER_MES2,TIMER_DIA;signed long TIMER_DIA2;
TIMER_ANO =((10000*TIMER_DIAS)+14780)/3652425;
TIMER_DIA2 = TIMER_DIAS-((365*TIMER_ANO)+(TIMER_ANO/4)-(TIMER_ANO/100)+(TIMER_ANO/400));
if (TIMER_DIA2 < 0)
{TIMER_ANO-=1;
TIMER_DIA2 = TIMER_DIAS-((365*TIMER_ANO)+(TIMER_ANO/4)-(TIMER_ANO/100)+(TIMER_ANO/400));
}
TIMER_MES2=((100*TIMER_DIA2)+52)/3060;
TIMER_MES=((TIMER_MES2+2)%12)+1;
TIMER_ANO=TIMER_ANO+((TIMER_MES2+2)/12);
TIMER_DIA=TIMER_DIA2-((TIMER_MES2*306+5)/10)+1;
//
TIMER_ANO=TIMER_ANO%100;
TIMER_ANO=TIMER_ANO+(TIMER_MES*100)+(TIMER_DIA*10000);
return TIMER_ANO;
}
Evidentemente esta parte del codigo:
TIMER_ANO =((10000*TIMER_DIAS)+14780)/3652425;
Requiere un long long (entero de 64 bits) y no esta disponible para el PICC18 de Hitech.
La pregunta:
Tienen alguna solucion para realizar un calculo para enteros en 64 bits o un algoritmo de dias a fecha en 32 bits?
Saludos espero sus comentarios!!