• Domingo 28 de Abril de 2024, 21:33

Autor Tema:  Manejo De Fechas  (Leído 2286 veces)

Devilcpc

  • Miembro activo
  • **
  • Mensajes: 90
    • Ver Perfil
Manejo De Fechas
« en: Miércoles 27 de Octubre de 2004, 20:12 »
0
Buenas

Se me ha presentado un pequeño problemita, resulta q estoy haciendo un programa tipo una agenda entre los cuales se guardan las fechas de cumpleaños de mis amigos en una base de datos, en la pantalla principal el programa debe decir si es el cumpleaños de alguien hoy (eso es facil y lo pude hacer), pero la parte q no me sale es calcular cual seria el proximo cumpleaños

la base de datos cuenta con 3 campos separados:
Dia de nacimiento (NacDia), Mes de nacimiento (NacMes), Año de nacimineto (NacAño);

la fecha actual la tomo con una struct tm, por lo q obtengo por separado el DiaActual, MesActual y AñoActual

se me complica el tema alrealizar las operaciones matematicas para calcular el prox cumpleaños, ya q por ejemplo de diciembre a enero hay 1 solo mes de diferencia pero matematicamente hay 11 (12-1 = 11)  :lightsabre:

si a alguien se le ocurre como hacer q me lo diga, gracias

Saludos  :hola:
-- Solo se q no se nada, pero aun supero a la generalidad de todos los hombres q no saben eso tampoco --

Devilcpc

  • Miembro activo
  • **
  • Mensajes: 90
    • Ver Perfil
Re: Manejo De Fechas
« Respuesta #1 en: Martes 2 de Noviembre de 2004, 00:26 »
0
esta si se q esta dificil, pero algun genio tiene q haber por aca....
-- Solo se q no se nada, pero aun supero a la generalidad de todos los hombres q no saben eso tampoco --

Joss

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Re: Manejo De Fechas
« Respuesta #2 en: Martes 2 de Noviembre de 2004, 20:14 »
0
Tengo, Mesactual y por otro lado, mesnac.
Para ver la diferencia en meses, yo haria:

int difer ;

difer=mesNac - Mesactual ;
if ( difer<0 )
  difer = difer + 12 ;

Ejemplos:

MesActual = 11 (Noviembre)
Mes NAc= 12 (Diciembre)
difer = 1 mes.

MesActual = 11 (Noviembre)
Mes NAc= 2 (Febrero)
difer = 2 - 11 = -9 +12 = 3 meses.

Ojo con el dia del mes, cuando Mesactual y MesNac coincidan.

De nada.

Devilcpc

  • Miembro activo
  • **
  • Mensajes: 90
    • Ver Perfil
Re: Manejo De Fechas
« Respuesta #3 en: Miércoles 3 de Noviembre de 2004, 02:48 »
0
gracias por la ayuda, ahora pruebo y te digo... :hola:
-- Solo se q no se nada, pero aun supero a la generalidad de todos los hombres q no saben eso tampoco --

carquemo

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Re: Manejo De Fechas
« Respuesta #4 en: Jueves 4 de Noviembre de 2004, 21:35 »
0
Hola
No se si te funciono lo de antes, pero aqui te explico una que funciona seguro
se trata de organizar la fecha de manera diferente a la que estamos acostumbrados, al menos los de dia/mes/año, el truco esta en organizarla, al reves, año/mes/dia, EN UN SOLO NUMERO, me explico:
 el ejemplo que tu dices de diciembre y enero, si estamos a noviembre de 2004,
los cumpleaños a partir de enero seran ya del 2005, es decir el 04 de enero de 2005 pasaria a ser 20050104, mientras que el de diciembre, como es este año, será (por ejemplo el 25 de diciembre de 2004) 20041225, como puedes ver 20041205 es menor que 20050104, y por eso será el proximo, ¿que como pasas la fecha de "separada" a "junta al reves", asi:

     fecha=año*10000 + mes * 100 + dia
cada vez que se produce un cumpleaños, has de
Tenemos dos orejas, dos ojos pero solo una boca, ¿será por algo?

Devilcpc

  • Miembro activo
  • **
  • Mensajes: 90
    • Ver Perfil
Re: Manejo De Fechas
« Respuesta #5 en: Sábado 6 de Noviembre de 2004, 03:40 »
0
me parece q se te corto el mensaje, pero entendi lo q queres decir y me gusto, la verdad es q no tube tiempo de probar la otra forma, ahora pruebo las dos y te digo

el otro problema q estoy teniendo es q la struct time, no me devuelve bien el año, yo hice lo sig:

Código: Text
  1.  
  2. struct tm *DiaActual;
  3. time_t timer;
  4.  
  5. timer = time (NULL);
  6. DiaActual = localtime(&timer);
  7.  
  8.  

y DiaActual->tm_year no me devuelve 2004, me devuelve 104

el resto esta bien
alguien sabe por que?
-- Solo se q no se nada, pero aun supero a la generalidad de todos los hombres q no saben eso tampoco --

Joss

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Re: Manejo De Fechas
« Respuesta #6 en: Lunes 8 de Noviembre de 2004, 14:20 »
0
... DiaActual->tm_year no me devuelve 2004, me devuelve 104 ...

La funcion trabaja asi. Desde los tiempos del turboC ms-dos, que yo sepa.
No esta mal.
Da el año, desde 1900.
Es decir, para saber el año actual tienes que sumar 1900 al resultado, en tu caso 104, que da 2004, el año actual.
Por cierto, ten cuidado con el campo tm_mon, que da el mes desde el 0 al 11.
Otro campo que puede venirte bien para tu aplicacion es tm_yday, que dice el dia del año en que nos encontramos (desde 0 hasta 365)
Salud