Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Kougami en 14 Noviembre 2016, 15:02 pm



Título: [AYUDA] Calcular los dias entre dos meses C++
Publicado por: Kougami en 14 Noviembre 2016, 15:02 pm
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.


Título: Re: [AYUDA] Calcular los dias entre dos meses C++
Publicado por: 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
Código
  1. 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/


Título: Re: [AYUDA] Calcular los dias entre dos meses C++
Publicado por: Kougami en 14 Noviembre 2016, 16:01 pm
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


Título: Re: [AYUDA] Calcular los dias entre dos meses C++
Publicado por: engel lex en 14 Noviembre 2016, 16:11 pm
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


Título: Re: [AYUDA] Calcular los dias entre dos meses C++
Publicado por: eduardo1012 en 16 Noviembre 2016, 05:51 am
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
Código
  1. 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.
Código
  1. #include <time.h>
  2. #include<stdio.h>
  3. time_t to_seconds(const char *date)
  4. {
  5. char *strptime(const char *buf, const char *format, struct tm *tm);
  6.        struct tm storage={0,0,0,0,0,0,0,0,0};
  7.        char *p=NULL;
  8.        time_t retval=0;
  9.  
  10.        p=(char *)strptime(date,"%d-%b-%Y",&storage);
  11.        if(p==NULL)
  12.        {
  13.                retval=0;
  14.        }
  15.        else
  16.        {
  17.                retval=mktime(&storage);
  18.        }
  19.        return retval;
  20. }
  21.  
  22. int main()
  23. {
  24.  
  25.   char *date1="20-JUN-2016";
  26.   char *date2="21-JUN-2016";
  27.   scanf("%s",date1);
  28.   scanf("%s",date2);
  29.   time_t d1=to_seconds(date1);
  30.   time_t d2=to_seconds(date2);
  31.  
  32.   printf("date comparison: %s %s ",date1,date2);
  33.   if(d1==d2) printf("equal\n");
  34.   if(d2>d1)  printf("second date is later\n");
  35.   if(d2<d1)  printf("seocnd date is earlier\n");
  36.   return 0;
  37. }


Título: Re: [AYUDA] Calcular los dias entre dos meses C++
Publicado por: Kougami en 16 Noviembre 2016, 10:37 am
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???


Título: Re: [AYUDA] Calcular los dias entre dos meses C++
Publicado por: engel lex en 16 Noviembre 2016, 15:43 pm
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