Problema con la hora (lenguaje C)

Iniciado por santos96, 7 Mayo 2015, 17:34 PM

0 Miembros y 1 Visitante están viendo este tema.

santos96

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.

do-while

¡Buenas!

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

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

santos96

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!

тαптяα

/*
* 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

santos96

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.

тαптяα

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

rir3760

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language