Hola a tod@s, acabo de hacer un metodo para calcular los dias transcurridos desde el 1 de Enero de ese año, teniendo en cuanta que la fecha pasada por parametro esta validada, se que este metodo funciona pero me gustaria saber si hay otras formas mas simples de implementarlo? Me siento tonta :-\
Gracias!! ;-)
void calcular_dias(t_fecha n)
{
int dias=0, m[11]={31,28,31,30,31,30,31,31,30,31,30};
switch(n[1]){
case 1: dias+=n[0];break;
case 2: dias+=m[0]+n[0];break;
case 3: dias+=m[0]+m[1]+n[0];break;
case 4: dias+=m[0]+m[1]+m[2]+n[0];break;
case 5: dias+=m[0]+m[1]+m[2]+m[3]+n[0];break;
case 6: dias+=m[0]+m[1]+m[2]+m[3]+m[4]+n[0];break;
case 7: dias+=m[0]+m[1]+m[2]+m[3]+m[4]+m[5]+n[0];break;
case 8: dias+=m[0]+m[1]+m[2]+m[3]+m[4]+m[5]+m[6]+n[0];break;
case 9: dias+=m[0]+m[1]+m[2]+m[3]+m[4]+m[5]+m[6]+m[7]+n[0];break;
case 10: dias+=m[0]+m[1]+m[2]+m[3]+m[4]+m[5]+m[6]+m[7]+m[8]+n[0];break;
case 11: dias+=m[0]+m[1]+m[2]+m[3]+m[4]+m[5]+m[6]+m[7]+m[8]+m[9]+n[0];break;
case 12: dias+=m[0]+m[1]+m[2]+m[3]+m[4]+m[5]+m[6]+m[7]+m[8]+m[9]+m[10]+n[0];break;
}
if(n[2]%4==0 && n[1]>2){
dias++;
}
cout<<"Dias transcurridos desde el 1 de Enero: "<<dias<<endl;
}
Puedes usar la librería time.h que ya viene preparada para trabajar con fechas y horas. Algo así:
#include <stdio.h>
#include <time.h>
unsigned calcular_dias(struct tm *fecha) {
double diff;
struct tm aux = *fecha; // Copio la fecha que me han pasado
aux.tm_mday = 1; // Cambio a dia 1 del mes
aux.tm_mon = 0; // Cambio al primer mes del año. Los meses empiezan por 0
diff = difftime(mktime(fecha), mktime(&aux)); // Calculo los segundos de diferencia entre las dos fechas
return diff/(60*60*24); // Devuelvo la diferencia en días
}
int main() {
time_t tiempo;
struct tm *fecha;
tiempo = time(NULL); // Consigo la marca de tiempo actual
fecha = localtime(&tiempo); // Y la paso a la estrutura que la descompone en fecha/hora
printf("Han pasado %u dias.", calcular_dias(fecha));
}
Creo que podrias calcular la cantidad de dias utilizando un for que valla desde 0 hasta n
int calcular_dias(int n){
int dias=0;
int m[11] = {31,28,31,30,31,30,31,31,30,31,30};
for(int i = 0; i < n;i++){
dias += m[i];
}
return dias;
}
Algo asi creo yo (Pd: yo tambien estoy comenzando a programar :B)
Gracias MAFUS, aunque no entiendo casi nada de ese codigo , que debiera leer para entenderlo a parte del codigo? :laugh:
M4RQUS , bueno eso si lo sabia pero se me hace ya mucho codigo colocar un for y tampoco quiero usar una funcion aparte solo para calcular los dias, por ahi lei acerca de un for in mmmmmm ;-)
Puedes aprender que hace cada parte que desconoces aquí: http://c.conclase.net/librerias/index.php?ansilib=time#inicio
No es tan complicado usar un for ademas lo podes poner dentro del procedimiento y te acorta mucho el codigo