• Sábado 14 de Diciembre de 2024, 14:01

Autor Tema:  Validar Fecha Y Hora  (Leído 1395 veces)

claudi_1977

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Validar Fecha Y Hora
« en: Sábado 10 de Julio de 2004, 01:46 »
0
:hola: Amigos, necesito  validar la fecha y la hora de un pequeño programa en C.
Lo que pasa es que tengo que recatar la fecha del sistema, SIN OCUPAR EL COMANDO SYSTEM, y luego cuando el usuario vaya ingresando el dia el mes y el año que me despliegue un mensaje que diga fecha incorrecta o algo, eso lo se hacerk pero mi duda es como valido los meses que tienen 30 31 o 28 dias?  LES JURO QUE ESTOY SUPER PERDIDA.   :unsure:   Tengo que hacer lo mismo con la hora.
Miren aca pego el codigo, APARTE ME SALE UN ERROR MUY GRAVE QUE NO SE DE QUE SE TRATA, POR FAVOR SI LO PUEDEN VER Y AYUDARME LES ESTARE ETERNAMENTE AGRADECIDA   :(

Si alguien sabe o quiere ubicarme mas rapido para ayudarme mi correo es claudi_06051977@hotmail.com

gracias denuevo  :good:

el codigo es

#include<dos.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
struct date fecha;
struct time hora;
int ValidarDia();
int meses[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int fnc_fecha();
int dia;
void fnc_hora();

int main()
{
char opcion;
do
{
clrscr();
gotoxy(35,2);
printf("RUTINA DE FECHA\n");
gotoxy(25,10);
printf("1.- Fecha \n");
gotoxy(25,12);
printf("2.- Hora \n");
gotoxy(25,14);
printf("3.- Salir\n ");

opcion=getchar();
if (opcion=='1')
{
if(fnc_fecha()==0)
{
printf("\nError El mes '%d' solo admite %d dias",fecha.da_mon,meses[fecha.da_mon-1]);;
printf("\n pulsar una tecla para continuar ....");
getch();
}
}
else if(opcion=='2')
fnc_hora();
}
while(opcion!='3');
return 1;
}

int fnc_fecha()
{


clrscr();
getdate(&fecha);
printf("Su fecha actual es: %d-%d-%d",fecha.da_day, fecha.da_mon,fecha.da_year);
printf("\nIngrese nuevo dia: ");
scanf("%d",&dia);
printf("\nIngrese nuevo mes: ");
scanf("%d",&fecha.da_mon);
printf("\nIngrese nuevo año: ");
scanf("%d",&fecha.da_year);
if(ValidarDia())
fecha.da_day=dia;
else
return 0;

setdate(&fecha);
printf("\nSu nueva fecha es: %d-%d-%d\n",fecha.da_day, fecha.da_mon,fecha.da_year);
system("pause");
return 1;
}



void fnc_hora()
{



clrscr();
gettime(&hora);
printf("Su hora actual es: %d:%d:%d",hora.ti_hour, hora.ti_min,hora.ti_sec);
printf("\nIngrese nuevos segundos: ");
scanf(" %d",hora.ti_sec);
printf("\nIngrese nuevos minutos: ");
scanf("%d",&hora.ti_min);
printf("\nIngrese nueva hora: ");
scanf("%d",&hora.ti_hour);
settime(&hora);
printf("\nSu nueva hora es: %d:%d:%d\n",hora.ti_hour,hora.ti_min,hora.ti_sec);
system("pause");
}

int ValidarDia()
{
if(dia<=meses[fecha.da_mon-1])
return 1;
else
return 0;
}

-SB-

  • Miembro activo
  • **
  • Mensajes: 60
    • Ver Perfil
Re: Validar Fecha Y Hora
« Respuesta #1 en: Sábado 10 de Julio de 2004, 15:30 »
0
A ver, en cuanto lo que has dicho de los meses, puedes hacer algo asi, define un array en el que cada elemento sea un mes, por ejemplo:

Código: Text
  1.  
  2. V[13] = {0, 31, 29 /*o 28, depende el año*/, 31, 30, 31,30, 31, 31, 30, 31, 30, 31}
  3.  
  4.  

Si quieres saber los dias de enero por ejemplo deberas poner V[1], si quieres los de agosto V[8], y asi con todos los meses..

Espero que te haya servido de algo.

Un saludo!

Pd: Cuando pastees un codigo ayudaria que quites las cosas menos relevantes y lo hagas con el tag CODE para facilitar su lectura, yo los que estan asi ni los miro..

Noel Solw

  • Miembro activo
  • **
  • Mensajes: 81
    • Ver Perfil
Re: Validar Fecha Y Hora
« Respuesta #2 en: Sábado 17 de Julio de 2004, 11:00 »
0
A continuacion adjunto una funcion para validar una fecha :


const int days[2][13] = {{365,31,28,31,30,31,30,31,31,30,31,30,31},// comunes
{366,31,29,31,30,31,30,31,31,30,31,30,31}};// bisiestos



struct Date
{
int dd, mm, yy;
};   // STRUCT DATE

int CheckDate(Date a)
{
   if(a.yy < 1900 || a.yy > 2005)
      return 0;     // fuera de los limites, opcional
   if(a.mm < 1 || a.mm > 12)
      return 0;// numero de mes incorrecto
   int k = (a.yy % 4 == 0) && (a.yy != 2000);// comun = 0,bisiesto = 1
   if(a.dd < 1 || a.dd > days[k][a.mm])
      return 0;// numero de dia incorrecto
   return 1;// la fecha es aceptada
}   // CHECK DATE