¿Cuál es el mejor método para imprimir la hora en C en el formato 2009‐08‐10
18:17:54.811
?
96
Utilice strftime () .
#include <stdio.h>
#include <time.h>
int main()
{
time_t timer;
char buffer[26];
struct tm* tm_info;
timer = time(NULL);
tm_info = localtime(&timer);
strftime(buffer, 26, "%Y-%m-%d %H:%M:%S", tm_info);
puts(buffer);
return 0;
}
Por milisegundos, eche un vistazo a esta pregunta. ¿Cómo medir el tiempo en milisegundos usando ANSI C?
time(&timer)
debería ser mejortimer = time(NULL);
, al menos para Linux.The tloc argument is obsolescent and should always be NULL in new code. When tloc is NULL, the call cannot fail.
Las respuestas anteriores no responden completamente a la pregunta (específicamente la parte milisegunda). Mi solución a esto es usar gettimeofday antes de strftime. Tenga cuidado de no redondear milisegundos a "1000". Esto se basa en la respuesta de Hamid Nazari.
fuente
gettimeofday
no está disponible en implementaciones de Windowstime.h
define unastrftime
función que puede darte una representación textual de untime_t
usando algo como:pero eso no le dará una resolución inferior a un segundo, ya que no está disponible en a
time_t
. Produce:Si está realmente limitado por las especificaciones y no desea el espacio entre el día y la hora, simplemente elimínelo de la cadena de formato.
fuente
El siguiente código se imprime con precisión de microsegundos. Todo lo que tenemos que hacer es uso
gettimeofday
ystrftime
entv_sec
y añadirtv_usec
a la cadena construida.fuente
Podría usar
strftime
, perostruct tm
no tiene resolución por partes de segundos. No estoy seguro de si eso es absolutamente necesario para sus propósitos.fuente
truco:
fuente
Ninguna de las soluciones en esta página funcionó para mí, las mezclé y las hice funcionar con Windows y Visual Studio 2019, aquí se explica cómo:
Resultado:
fuente