Tiempo en cadena con HH: MM: SS (C-programación)
Pregunta
Me necesita para obtener la hora actual en una "HH: MM: SS" -format en una matriz de caracteres (string) para que yo pueda enviar el resultado más tarde, simplemente con un printf("%s", timeString);
Estoy bastante confusa en los timeval
y time_t
tipos cierto, por lo que cualquier explicación sería impresionante:)
EDIT: Así que he intentado con strftime etc, y poco trabajado. Aquí está mi código:
time_t current_time;
struct tm * time_info;
char timeString[8];
time(¤t_time);
time_info = localtime(¤t_time);
strftime(timeString, 8, "%H:%M:%S", time_info);
puts(timeString);
Sin embargo, la salida es la siguiente: "13: 49: 53a ?? J`aS"
¿Qué está pasando con el " una ?? J`aS? " al final?
Solución
Te estás poniendo la basura de este código:
time_t current_time;
struct tm * time_info;
char timeString[8];
time(¤t_time);
time_info = localtime(¤t_time);
strftime(timeString, 8, "%H:%M:%S", time_info);
puts(timeString);
Debido a que usted no está dejando espacio para un terminador nulo (\ 0) en la cadena, por lo que cuando la cadena impreso, que no sabe donde el fin es la basura y inteprets azar en el siguiente bit de la memoria como parte de la cadena.
Cambiar a esto:
time_t current_time;
struct tm * time_info;
char timeString[9]; // space for "HH:MM:SS\0"
time(¤t_time);
time_info = localtime(¤t_time);
strftime(timeString, sizeof(timeString), "%H:%M:%S", time_info);
puts(timeString);
Y va a trabajar correctamente porque strftime()
tendrá espacio suficiente para añadir un \ 0. Tenga en cuenta que estoy usando sizeof (matriz) para evitar el riesgo de olvidarse de cambiar el número en ambos lugares.
Otros consejos
Tome un vistazo a la href="http://www.cplusplus.com/reference/clibrary/ctime/strftime/" rel="noreferrer"> función strftime , lo que le permite escribir el tiempo en una matriz de caracteres con un formato de su elección.
#include <stdio.h>
#include <time.h>
/* get seconds since the Epoch */
time_t secs = time(0);
/* convert to localtime */
struct tm *local = localtime(&secs);
/* and set the string */
sprintf(timeString, "%02d:%02d:%02d", local->tm_hour, local->tm_min, local->tm_sec);
Los tipos importantes para hacer frente con el tiempo (el tipo de pared reloj de tiempo, no proceso / hora hilo) son time_t
y struct tm
.
Con un poco de trabajo se puede convertir entre uno y otro, pero hay que prestar atención a la hora local con respecto al tiempo UTC.
de <time.h>
, probar las funciones allí hasta que grok vez en C.
Una vez más, prestar atención a la hora UTC y la hora local.