Tempo in stringa con HH: MM: SS (C-programmazione)
Domanda
devo ottenere il tempo corrente in una "HH: MM: SS" -format in un array di caratteri (stringa) così posso uscita il risultato seguito semplicemente con un printf("%s", timeString);
Sono abbastanza confuso sulle timeval
e time_t
tipi A proposito, in modo che qualsiasi spiegazione sarebbe impressionante:)
EDIT: Così ho provato con strftime, ecc, ed è un po funzionato. Ecco il mio codice:
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);
Ma l'output è questo: "13: 49: 53 bis ?? J`aS"
Che cosa sta succedendo con il " un ?? J`aS? " alla fine?
Soluzione
Stai diventando spazzatura da questo codice:
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);
Perché non stai permettendo lo spazio per un terminatore null (\ 0) sulla corda, in modo che quando la corda è stampato, non sa dove la fine è spazzatura e inteprets casuale nel prossimo po 'di memoria come parte della stringa.
Modificare in questo modo:
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);
E sarà funzionare correttamente a causa strftime()
avrà abbastanza spazio per aggiungere un \ 0. Si noti che sto usando sizeof (array) per evitare il rischio dimenticare di modificare il numero in entrambi i luoghi.
Altri suggerimenti
Date un'occhiata al href="http://www.cplusplus.com/reference/clibrary/ctime/strftime/" rel="noreferrer"> strftime funzione , che permette di scrivere il tempo in un array di caratteri con un formato di vostra scelta.
#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);
I tipi importanti per trattare con il tempo (il tipo di parete-orologio del tempo, non di processo / ora filo) sono time_t
e struct tm
.
Con un po 'di lavoro è possibile convertire tra l'una e l'altra, ma bisogna prestare attenzione a ora locale rispetto al tempo UTC.
Si guardi con attenzione la di <time.h>
, provare le funzioni là fino a che Grok di tempo in C.
Anche in questo caso, prestare attenzione al tempo UTC e l'ora locale.