[AYUDA] Calcular los dias entre dos meses C++

Iniciado por Kougami, 14 Noviembre 2016, 15:02 PM

0 Miembros y 2 Visitantes están viendo este tema.

Kougami

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.

engel lex

con ctime esto es bastante facil... te explico...

time tiene un struct (tm) que está armado de la siguiente manera



lo puedes llenar de una vez en ese orden

tal que hoy sería
Código (cpp) [Seleccionar]
struct std::tm a = {0,0,0,14,11,116};

esto con el fin de

time_t es el tipo de variable que contiene la fecha en formato unix, haciendo uso de 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/
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Kougami

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

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

eduardo1012

Cita de: engel lex en 14 Noviembre 2016, 15:45 PM
con ctime esto es bastante facil... te explico...

time tiene un struct (tm) que está armado de la siguiente manera



lo puedes llenar de una vez en ese orden

tal que hoy sería
Código (cpp) [Seleccionar]
struct std::tm a = {0,0,0,14,11,116};

esto con el fin de

time_t es el tipo de variable que contiene la fecha en formato unix, haciendo uso de 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;
}

Kougami

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???

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.