Qual é o melhor método para imprimir a hora em C no formato 2009‐08‐10
18:17:54.811
?
95
Use 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 parte dos milissegundos, dê uma olhada nesta pergunta. Como medir o tempo em milissegundos usando ANSI C?
time(&timer)
deva sertimer = time(NULL);
, pelo menos para Linux.The tloc argument is obsolescent and should always be NULL in new code. When tloc is NULL, the call cannot fail.
As respostas acima não respondem totalmente à pergunta (especificamente a parte dos milissegundos). Minha solução para isso é usar gettimeofday antes de strftime. Observe o cuidado para evitar arredondar milissegundos para "1000". Isso é baseado na resposta de Hamid Nazari.
fonte
gettimeofday
não está disponível em implementações do Windowstime.h
define umastrftime
função que pode fornecer uma representação textual de umtime_t
usando algo como:mas isso não dará a você uma resolução inferior a um segundo, pois não está disponível em a
time_t
. Ele produz:Se você estiver realmente limitado pelas especificações e não quiser o espaço entre o dia e a hora, apenas remova-o da string de formato.
fonte
O código a seguir é impresso com precisão de microssegundos. Tudo o que temos a fazer é uso
gettimeofday
estrftime
sobretv_sec
e anexartv_usec
para a cadeia construída.fonte
Você poderia usar
strftime
, masstruct tm
não tem resolução por alguns segundos. Não tenho certeza se isso é absolutamente necessário para seus propósitos.fonte
truque:
fonte
Nenhuma das soluções nesta página funcionou para mim, eu as misturei e as fiz funcionar com Windows e Visual Studio 2019, Veja como:
Resultado:
fonte