Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: santos96 en 7 Mayo 2015, 17:34 pm



Título: Problema con la hora (lenguaje C)
Publicado por: santos96 en 7 Mayo 2015, 17:34 pm
Buenas, tengo un par de dudas referentes a la hora en C:

Deseo realizar un programa que me solicite la fecha y hora en este formato (07/05/2015:17:45) es decir, 1º dia, 2º mes, 3º año y por ultimo la hora. Lo que debe hacer el programa es lo siguiente: Si la fecha introducida es anterior a la actual (ej: 07/05/2013:17:45) debe saltar un aviso de fecha anterior a la actual. Si se introduce una posterior el programa deberá calcularme el tiempo (en dias)  que falta para dicha fecha.

Gracias y un saludo.


Título: Re: Problema con la hora (lenguaje C)
Publicado por: do-while en 7 Mayo 2015, 18:12 pm
¡Buenas!

Busca alguna referencia del lenguaje C y mira las funciones que tienes en time.h, no te hace falta más.

¡Saludos!


Título: Re: Problema con la hora (lenguaje C)
Publicado por: santos96 en 7 Mayo 2015, 20:59 pm
Hola compi!

Ya lo he hecho, pero el problema es que la hora que tomo del ordenador para comparar si es menor que la introducida y sino restarla, me la guarda en un string y no se como seguir a partir de ahi.

Gracias!


Título: Re: Problema con la hora (lenguaje C)
Publicado por: тαптяα en 7 Mayo 2015, 22:42 pm
/*
 * time.c
 *
 * Copyright 2015
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 * MA 02110-1301, USA.
 *
 *
 */
#include <stdio.h>
#include <time.h>

int main( void )
{
   long int i=0;
   time_t comienzo, final;
   struct tm *tiempoComienzoPtr, *tiempoFinalPtr;

   comienzo = time( NULL );
   for( i=0; i<10000; i++ )   printf( "-" );
   final = time( NULL );

   printf( "Comienzo: %u s\n", comienzo );
   printf( "Final: %u s\n", final );
   printf( "Número de segundos transcurridos desde el comienzo del programa: %f s\n", difftime(final, comienzo) );

   tiempoComienzoPtr = gmtime( &amp;comienzo );
   tiempoFinalPtr = gmtime( &amp;final );
   printf( "Comienzo: %s\n", asctime(tiempoComienzoPtr) );
   printf( "Final: %s\n", asctime(tiempoFinalPtr) );

   return 0;
}


Es el codigo de ejemplo de la pagina C con clase sobre la librería time.h


Título: Re: Problema con la hora (lenguaje C)
Publicado por: santos96 en 8 Mayo 2015, 00:44 am
Gracias!!

Ahora el unico problema que tengo es el siguiente, por ejemplo:

int dia, mes, año, hora, minuto;
char fecha [10]  = "04/05/2015:11:15";

Como hago para guardar el día, mes, año, hora y minutos en las variables tipo int declaradas?
La funcion atoi no me valdria porque al llegar a la ' / ' daria error.


Título: Re: Problema con la hora (lenguaje C)
Publicado por: тαптяα en 9 Mayo 2015, 12:35 pm
Gracias!!

Ahora el unico problema que tengo es el siguiente, por ejemplo:

int dia, mes, año, hora, minuto;
char fecha [10]  = "04/05/2015:11:15";

Como hago para guardar el día, mes, año, hora y minutos en las variables tipo int declaradas?
La funcion atoi no me valdria porque al llegar a la ' / ' daria error.

Separa la cadena, cuando encuentre un '/' y vas guardando cada separación en una variable.

Y los datos de esas variables podrás modificarlos a tu gusto

Saludos


Título: Re: Problema con la hora (lenguaje C)
Publicado por: rir3760 en 9 Mayo 2015, 17:30 pm
Ahora el unico problema que tengo es el siguiente, por ejemplo:

int dia, mes, año, hora, minuto;
char fecha [10]  = "04/05/2015:11:15";

Como hago para guardar el día, mes, año, hora y minutos en las variables tipo int declaradas?
La funcion atoi no me valdria porque al llegar a la ' / ' daria error.
En tu ejemplo no debes indicar el numero de elementos del array "fecha" ya que la literal "04/05/2015:11:15" tiene un tamaño mayor.

Para extraer los valores de la cadena puedes utilizar sscanf, un ejemplo basado en el tuyo es:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. int main(void)
  6. {
  7.   char fecha []  = "04/05/2015:11:15";
  8.   struct tm d;
  9.   int rv;
  10.  
  11.   rv = sscanf(fecha, "%d/%d/%d:%d:%d",
  12.      &d.tm_mday, &d.tm_mon, &d.tm_year, &d.tm_min, &d.tm_sec);
  13.  
  14.   if (rv == 5)
  15.      printf("%04d/%02d/%02d\n", d.tm_year, d.tm_mon, d.tm_mday);
  16.  
  17.   return EXIT_SUCCESS;
  18. }

Un saludo