Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/03/2010, 11:34
Avatar de sadalsuud
sadalsuud
 
Fecha de Ingreso: marzo-2010
Ubicación: en la casa del duende
Mensajes: 96
Antigüedad: 14 años, 1 mes
Puntos: 1
diferencia de fechas en años, meses y días en c++

Hola buenas tardes sr

Tengo una duda con un programa, me piden encontrar la diferencia de dos fechasa en años, meses y días con la fecha de nacimiento de una persona, y la fecha del sistema.

No sabía nada de nada con fechas, y me día a la tarea de usar las funciones de la libreria <time.h>y ya tengo la fecha del sistema, pregunto la fecha de la persona, y creo una estructura tm para luego pasarla como tipo de dato time_t y luego usar la funcion difftime y me regresa la diferencia en segundos, bien.

Mi pregunta es, cómo puedo hacer para convertir esos segundos de tal forma que pueda mostrar en pantalla: ud tiene X años, Y meses, Z días de edad.

La diferencia en segundos, la pasé a time_t y este con ctime la pasé a char* para mostrar en pantalla, pero me da con mi fecha de nacimiento por ejemplo, 7 de julio de 1993 y necesito es la diferencia no una fecha.

pongo el codigo por si acaso:

Código C++:
Ver original
  1. #include <iostream>
  2. #include <time.h>
  3. using std::cout;
  4. using std::cin;
  5. using std::endl;
  6.  
  7. int main()
  8. {
  9.   time_t now = time(0);        // fecha actal
  10.  
  11.   struct tm time_str;             // asigno de una vez valores para el 14 de sep de 1986
  12.    
  13.     time_str.tm_year = 1986-1900;
  14.     time_str.tm_mon = 9-1;
  15.     time_str.tm_mday = 14;
  16.     time_str.tm_hour = 0;
  17.     time_str.tm_min = 0;
  18.     time_str.tm_sec = 0;
  19.     time_str.tm_isdst = -1;
  20.  
  21.   time_t nacido = mktime(&time_str);
  22.   double diferencia = difftime(now, nacido);
  23.  
  24.   // Hasta aqui tengo la diferencia en segundos, luego la "convierto" en fecha.
  25.  
  26.   time_t difer = diferencia;
  27.   time_t* pRta = &difer;
  28.   char* rta = ctime(pRta);
  29.    
  30.   cout << "\n\ndiferencia :D -> " << rta;    // me regresa julio 16 de 1993
  31.  return 0;
  32. }

El programa en mi caso deberia sacar: 23 años, 7 meses, 16 días // mas o menos a lapiz
Agradezco sus comentarios
un saludo