Qual è il metodo migliore per stampare il tempo in C nel formato 2009‐08‐10
18:17:54.811
?Come stampare il tempo nel formato: 2009-08-10 18: 17: 54.811
risposta
Utilizzare strftime().
#include <stdio.h>
#include <time.h>
int main()
{
time_t timer;
char buffer[26];
struct tm* tm_info;
time(&timer);
tm_info = localtime(&timer);
strftime(buffer, 26, "%Y-%m-%d %H:%M:%S", tm_info);
puts(buffer);
return 0;
}
Per la parte in millisecondi, dare un'occhiata a questa domanda. How to measure time in milliseconds using ANSI C?
È possibile utilizzare strftime
, ma struct tm
non ha risoluzione per parti di secondi. Non sono sicuro che sia assolutamente necessario per i tuoi scopi.
struct tm tm;
/* Set tm to the correct time */
char s[20]; /* strlen("2009-08-10 18:17:54") + 1 */
strftime(s, 20, "%F %H:%M:%S", &tm);
Digitazione: '% s' =>'% S' –
Grazie a @HugoIdeler. Fisso. –
time.h
definisce una funzione strftime
che può dare una rappresentazione testuale di un time_t
usando qualcosa come:
#include <stdio.h>
#include <time.h>
int main (void) {
char buff[100];
time_t now = time (0);
strftime (buff, 100, "%Y-%m-%d %H:%M:%S.000", localtime (&now));
printf ("%s\n", buff);
return 0;
}
ma che non ti darà risoluzione sub-secondi dal momento che non è disponibile da un time_t
. Produce:
2010-09-09 10:08:34.000
Se sei veramente vincolati dalle specifiche e non si desidera lo spazio tra il giorno e l'ora, basta rimuoverlo dalla stringa di formato.
+1 per il trucco espediente per la compilazione del display al millisecondo. Una volta ho avuto un cliente che voleva che lo facessi, ma con cifre non pari a zero, quindi sembrava che ci fosse un significato. Ne ho parlato fuori ma ho accettato di mettere zero. – RBerteig
Un mio amico (non io ovviamente) una volta usava un trucco simile: tenevano le statiche contenenti l'ultimo secondo e "millisecondo".Dove il secondo non è cambiato dall'ultima volta, hanno appena aggiunto un valore casuale compreso tra 1 e 200 a millisec (assicurandosi che non sia passato oltre 999 ovviamente - il massimo effettivo per il rand() è sempre stato il minimo di 200 e metà della distanza a 999). Dove il secondo è cambiato, ha appena impostato millisec a 0 prima dell'aggiunta. Nizza apparentemente casuale ma correttamente sequenziato in millisecondi e il cliente non ne è stato più saggio :-) – paxdiablo
Le risposte di cui sopra non rispondono completamente alla domanda (in particolare la parte del millisecondo). La mia soluzione a questo è di usare gettimeofday prima di strftime. Prestare attenzione a evitare l'arrotondamento millisec a "1000". Questo è basato sulla risposta di Hamid Nazari.
#include <stdio.h>
#include <sys/time.h>
#include <time.h>
#include <math.h>
int main() {
char buffer[26];
int millisec;
struct tm* tm_info;
struct timeval tv;
gettimeofday(&tv, NULL);
millisec = lrint(tv.tv_usec/1000.0); // Round to nearest millisec
if (millisec>=1000) { // Allow for rounding up to nearest second
millisec -=1000;
tv.tv_sec++;
}
tm_info = localtime(&tv.tv_sec);
strftime(buffer, 26, "%Y:%m:%d %H:%M:%S", tm_info);
printf("%s.%03d\n", buffer, millisec);
return 0;
}
Il codice seguente stampa con precisione in microsecondi. Tutto quello che dobbiamo fare è usare gettimeofday
e strftime
su tv_sec
e aggiungere tv_usec
alla stringa costruita.
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
int main(void) {
struct timeval tmnow;
struct tm *tm;
char buf[30], usec_buf[6];
gettimeofday(&tmnow, NULL);
tm = localtime(&tmnow.tv_sec);
strftime(buf,30,"%Y:%m:%dT%H:%M:%S", tm);
strcat(buf,".");
sprintf(usec_buf,"%dZ",(int)tmnow.tv_usec);
strcat(buf,usec_buf);
printf("%s",buf);
return 0;
}
- 1. Come stampare tempo come #inst
- 2. Il formato di tempo/durata nel file MPEG-DASH .MPD?
- 3. Il layout dell'oggetto ListView è diverso tra targetSdkVersion = "17" e targetSdkVersion = "18"
- 4. Python, voglio stampare float nel formato esatto + -00.00
- 5. Convertire un formato di data stringa da "17-Nov-2011" a "11/17/11"
- 6. Twig - tempo fa formato
- 7. Problema con il problema Project Euler 18
- 8. ottenere la differenza nel tempo in HH: MM formato php
- 9. tempo Rimuovi dal formato ora GMT
- 10. Project Euler 18
- 11. Come ottenere il tempo in formato am/pm iphone NSDateFormatter?
- 12. Jquery - Prendi il tempo in formato HH: MM tra due date
- 13. Specificatore di formato corretto per stampare il puntatore (indirizzo)?
- 14. Come stampare la data nel formato mm/gg/aaaa in VB
- 15. Come posso stampare il contenuto dello stack nel programma C?
- 16. Come posso stampare un messaggio nel Makefile?
- 17. Come stampare dataframe senza indice
- 18. come stampare il valore esatto della cella data nel formato data foglio excel come mm/gg/aaaa usando apache poi
- 19. Come stampare jaxb sull'oggetto java nel logger
- 20. Come stampare l'output in formato terminale in una variabile
- 21. Come stampare rapidamente gli hash Ruby in un formato tabella?
- 22. Come stampare le variabili R nel mezzo della stringa
- 23. Come stampare i valori durante il debug
- 24. Come stampare gli eventi in tempo con l'utilizzo di matplotlib
- 25. Ordina array di stringhe contenenti il tempo nel formato '09: 00 AM '?
- 26. Calendario formato Android per tempo di uscita
- 27. come isolare il bug di rendering di firefox 17
- 28. Come stampare tabelle ben formattate sulla console?
- 29. Regex per 12 ore e il tempo 24 ore formato
- 30. Tempo in secondi per il formato stringa personalizzato
È una risposta ancora migliore ora, e oggetti di scena per cercare come gestire la parte in millisecondo. Penso che il tuo buffer sia ora un po 'più lungo di quello che deve essere, però. –
Meglio essere più lunghi di quelli più corti :-) – paxdiablo
Risposta superba. Potrei fare qualsiasi cosa in PHP, ma sapevo che era tutto già presente in C. THanks. –