Ver Mensaje Individual
  #4 (permalink)  
Antiguo 22/04/2015, 07:04
Avatar de vangodp
vangodp
 
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Validar 2 fechas guardadas en variables char [C]

Pues más o menos es lo mismo, solo que envés de enviar 2 fechas a la funcion enviás la fecha actual, la de inicio y la de fin.

Seria más o menos eso:
Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. struct Fecha {
  4.     int dia;
  5.     int mes;
  6.     int anio;
  7. };
  8.  
  9. int comparar ( struct Fecha fecha, struct Fecha inicio, struct Fecha fin );
  10.  
  11. int main () {
  12.     struct Fecha inicio = { 10, 10, 2015 };
  13.     struct Fecha fecha  = { 11, 10, 2015 };
  14.     struct Fecha fin    = { 20, 10, 2015 };
  15.     printf ("%s\n",( comparar( fecha, inicio, fin ) ) ? "Esta entre las fechas de inicio y fin.":"Esta fuera de las fechas de inicio y fin." );
  16.    
  17.     getchar();
  18.     return 0;
  19. }
  20.  
  21. int comparar ( struct Fecha fecha, struct Fecha inicio, struct Fecha fin ) {
  22.  
  23.     if ( fecha.anio >= inicio.anio ) {
  24.         if ( fecha.mes >= inicio.mes ) {
  25.             if ( fecha.dia >= inicio.dia ) {
  26.                 if ( fecha.anio <= fin.anio ) {
  27.                     if ( fecha.mes <= fin.mes ) {
  28.                         if ( fecha.dia <= fin.dia ) {
  29.                             return 1;
  30.                         }
  31.                     }
  32.                 }
  33.                
  34.             }
  35.         }
  36.     }
  37.     return 0;
  38. };

Dado que ya sabes leer las fechas como enteros explicado en el ejemplo anterior me limito a poner solo la parte que compara las fechas. Depende de ti adaptarlo a tu código. ;)

Deberías leer sobre la libreria time.h que más que nada te brinda una llamada tm la que nos sirve para guardar fechas que se comprende de dia, mes, hora, dia de la semana, segundos y unas cuantas cosas más. Pero esta no es la ventaja, si no que tiene unas cuantas funciones que te hacen todo el trabajo por ti, un ejemplo es que simplemente creas las estructura tm struct tm fecha1 y acto seguido puedes solicitar al sistema que te rellene con la fecha actual de tu computadora.

Hay funciones para comparar, convertir en cadenas de caracteres, convierte el formato como por ejemplo en estados unidos veen la fecha de forma distinta que nosotros, nosotros lo vemos asi 30/12/2000 y ellos a lo mejor lo veen 2000/12/30 XDD. Hay muchas funcioncitas interesantes.

La descripcion de la estructura la tienes aquí:
int tm_sec; /* los segundos después del minuto -- [0,61] */
int tm_min; /* los minutos después de la hora -- [0,59] */
int tm_hour; /* las horas desde la medianoche -- [0,23] */
int tm_mday; /* el día del mes -- [1,31] */
int tm_mon; /* los meses desde Enero -- [0,11] */
int tm_year; /* los años desde 1900 */
int tm_wday; /* los días desde el Domingo -- [0,6] */
int tm_yday; /* los días desde Enero -- [0,365] */
int tm_isdst; /* el flag del Horario de Ahorro de Energía */
Sacado de: http://c.conclase.net/librerias/?ansitip=tm#inicio
En ese mismo enlace tienes al lado una explicación junto a ejemplos en el lado izquierdo de la pagina.

Aun que aquí tienes una descripción más breve: http://es.wikipedia.org/wiki/Time.h

Es ponerte con ella(time.h y struct tm) y hacer pruebas. Recuerde que no hay que reinventar la rueda XDD

Más enlaces:
http://www.zator.com/Cpp/E5_5_1a.htm#tm

Lo que más me gusta de esa librería es lo de imprimir la hora como caracteres, es muy flexible, con una función como sprintf o strftime te monta la fecha muy muy manejable a lo que en formato se refiere.

Mire un ejemplo de lo que puedes hacer con los debidos especificadores de formato: http://www.cplusplus.com/reference/ctime/asctime/
http://c.conclase.net/librerias/?ansifun=strftime

Aquí tienes una larga lista de especificadores para fechas: http://www.cplusplus.com/reference/ctime/strftime/

Si te vas a poner serio con eso de las fechas diría que es casi imprescindible saber manejar esa librería.

Bueno... Todo lo de arriba te lo pongo por si deseas echar un ojo, si no te interesa ni me hagas caso jajaj

Suerte!