Buenas,
Necesito ayuda para una funcion que permita calcular los dias que han pasado entre el 1 de enero y el 1 de un mes introducido por el usuario.
Muchas gracias de Antemano.
con ctime (http://www.cplusplus.com/reference/ctime/) esto es bastante facil... te explico...
time tiene un struct (tm) (http://www.cplusplus.com/reference/ctime/tm/) que está armado de la siguiente manera
(http://i.imgur.com/1iKf2Sa.png)
lo puedes llenar de una vez en ese orden
tal que hoy sería
struct std::tm a = {0,0,0,14,11,116};
esto con el fin de
time_t (http://www.cplusplus.com/reference/ctime/time_t/) es el tipo de variable que contiene la fecha en formato unix, haciendo uso de mktime (http://www.cplusplus.com/reference/ctime/mktime/) puede convertir una variable de tipo tm a time_t...
allí tienes las 2 fechas en segundos... solo las restas y listo!
aquí la referencia!
http://www.cplusplus.com/reference/ctime/
Gracias por la respuesta, pero el problema es que no puedo usar esa funcion, porque "no la se", es decir, porque el profesor no la ha enseñado aun.
El programa general pide una fecha, dia, mes y año y calcula la diferencia en dias, por separado, entre la fecha introducida y el 1/01/1900, es decir:
Primero calcula los años transcurridos contando si hay bisiestos de por medio y los expresa en dias,
Segundo calcula los dias transcurridos entre el dia introducido y el 1 del mes introducido,
Tercero calcula los meses transcurridos hasta enero y lo expresa en dias, y necesito una funcion que me haga ese calculo.
Pero de todos modos, muchas gracias por tu ayuda
entonces desde 0 el algoritmo es más o menos
(recomiendo crear un struct para ayudarte que guarde 3 int, ano, mes y dia
verificas cual fecha es mayor (primero año, luego mes y por ultimo dia)
la misma fecha inicial la usarás para ajustar a la fecha final...
si la fecha inicial año y mes y dia, son menores que la fecha final, a tu contador sumas un año, a tu fecha inicial también, repites hasta que sea falso y asegúrate de chequear años bisiestos) por cada ciclo, sumas 365 dias...
repites el procedimiento de arriba con mes.... si el mes y dia son mayores, simas un mes... (asegurate de lo mismo, si el mes es 12 y sumas 1, mes va a 1 y suma 1 al año) para esto necesitarás un array que guarde cuantos dias tiene cada mes...
ya de ahí deberías entender que hacer, espero te sirva
Cita de: engel lex en 14 Noviembre 2016, 15:45 PM
con ctime (http://www.cplusplus.com/reference/ctime/) esto es bastante facil... te explico...
time tiene un struct (tm) (http://www.cplusplus.com/reference/ctime/tm/) que está armado de la siguiente manera
(http://i.imgur.com/1iKf2Sa.png)
lo puedes llenar de una vez en ese orden
tal que hoy sería
struct std::tm a = {0,0,0,14,11,116};
esto con el fin de
time_t (http://www.cplusplus.com/reference/ctime/time_t/) es el tipo de variable que contiene la fecha en formato unix, haciendo uso de mktime (http://www.cplusplus.com/reference/ctime/mktime/) puede convertir una variable de tipo tm a time_t...
allí tienes las 2 fechas en segundos... solo las restas y listo!
aquí la referencia!
http://www.cplusplus.com/reference/ctime/
En que estoy mal? Que no logro comparar utilizando ctime.
#include <time.h>
#include<stdio.h>
time_t to_seconds(const char *date)
{
char *strptime(const char *buf, const char *format, struct tm *tm);
struct tm storage={0,0,0,0,0,0,0,0,0};
char *p=NULL;
time_t retval=0;
p=(char *)strptime(date,"%d-%b-%Y",&storage);
if(p==NULL)
{
retval=0;
}
else
{
retval=mktime(&storage);
}
return retval;
}
int main()
{
char *date1="20-JUN-2016";
char *date2="21-JUN-2016";
scanf("%s",date1);
scanf("%s",date2);
time_t d1=to_seconds(date1);
time_t d2=to_seconds(date2);
printf("date comparison: %s %s ",date1,date2);
if(d1==d2) printf("equal\n");
if(d2>d1) printf("second date is later\n");
if(d2<d1) printf("seocnd date is earlier\n");
return 0;
}
La cosa es que necesito obtener los dias que transcurren desde un mes introducido a enero, y luego con esos operare, hay algun modo de con un array donde incluya los valores de los dias de los meses y lueggo en un for los sume???
Ya dijiste como se resuelve xD crea un array de 12 elementos, con los días de cada mes, y si te dan por ejemplo 4/7 un for de 0 a < 7(-1) sumas los elementos del array y después el día... el -1 sería porque el mes 7 no se ha cumplido