Test Foro de elhacker.net SMF 2.1

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
Cita de: 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.

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
Cita de: santos96 en  8 Mayo 2015, 00:44 AMAhora 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:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
   char fecha []  = "04/05/2015:11:15";
   struct tm d;
   int rv;
   
   rv = sscanf(fecha, "%d/%d/%d:%d:%d",
      &d.tm_mday, &d.tm_mon, &d.tm_year, &d.tm_min, &d.tm_sec);
   
   if (rv == 5)
      printf("%04d/%02d/%02d\n", d.tm_year, d.tm_mon, d.tm_mday);
   
   return EXIT_SUCCESS;
}


Un saludo