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.
¡Buenas!
Busca alguna referencia del lenguaje C y mira las funciones que tienes en time.h, no te hace falta más.
¡Saludos!
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( &comienzo );
tiempoFinalPtr = gmtime( &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
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
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