Trechos de timestamp Unix em C
Exemplos de C para obter o timestamp Unix atual, converter segundos epoch em uma data legível com strftime() e construir timestamps a partir de datas de calendário com timegm().
#include <time.h>
time_t ts = time(NULL);#include <time.h>
struct timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
long ms = (long)ts.tv_sec * 1000L + ts.tv_nsec / 1000000L;#include <time.h>
#include <stdio.h>
time_t ts = 1700000000;
struct tm *tm_info = gmtime(&ts); // UTC
char buf[64];
strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", tm_info);
printf("%s\n", buf); // "2023-11-15 06:13:20"#include <time.h>
time_t ts = 1700000000;
struct tm *tm_info = localtime(&ts); // host timezone
char buf[64];
strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", tm_info);#define _GNU_SOURCE
#include <time.h>
struct tm t = {0};
t.tm_year = 2023 - 1900; // years since 1900
t.tm_mon = 10; // 0-indexed; 10 = November
t.tm_mday = 15;
t.tm_hour = 6;
t.tm_min = 13;
t.tm_sec = 20;
time_t ts = timegm(&t); // GNU/POSIX; use mktime() for local#include <time.h>
time_t start = time(NULL);
/* ... work ... */
time_t end = time(NULL);
double elapsed = difftime(end, start);Noções básicas de marcas de tempo em C
O C representa o tempo Unix como time_t, um tipo inteiro com sinal definido em <time.h>. Em sistemas de 64 bits, time_t tem 64 bits e é imune ao estouro do ano 2038. Em sistemas de 32 bits ainda tem 32 bits em muitas plataformas; verifique sizeof(time_t) para confirmar. A função padrão time(NULL) retorna o tempo Unix atual em segundos.
gmtime vs localtime
gmtime() converte um time_t em um struct tm em UTC. localtime() converte para o fuso local do sistema host. Use sempre gmtime() quando precisar de um resultado reproduzível e independente de fuso. Ambas as funções retornam um ponteiro para um struct estático compartilhado; copie o resultado para uma variável local struct tm se precisar dele entre chamadas de função.
Notas de produção para C
Prefira clock_gettime(CLOCK_REALTIME) a gettimeofday() para precisão abaixo do segundo; o POSIX marca gettimeofday() como obsolescente. Use timegm() (GNU/BSD) ou um equivalente portátil ao converter datas de calendário em marcas de tempo UTC; mktime() interpreta sua entrada como hora local, o que produz silenciosamente resultados errados em ambientes não UTC.
- Verifique sizeof(time_t) em alvos embarcados; o time_t de 32 bits estoura em janeiro de 2038
- Use gmtime_r() e localtime_r() em código multithread para evitar condições de corrida
- As strings de formato de strftime() são independentes de localidade; prefira %Y-%m-%d a %x para interoperabilidade
- timegm() não está no POSIX; use _mkgmtime() no Windows ou implemente manualmente com mktime() + deslocamento UTC
Converter o tempo do Linux: date(1), time_t, gmtime, strftime
Buscas por «convert linux time» ou conversão de marca de tempo no Linux geralmente se referem ao comando de shell date(1) ou às funções time_t da biblioteca C abaixo. O Linux armazena a marca de tempo Unix como time_t — com sinal de 32 bits em sistemas legados (limite Y2038), com sinal de 64 bits nos modernos.
- Shell (GNU date): date -u -d @1700000000 — epoch → data UTC
- Shell (BSD/macOS): date -ur 1700000000 — note -r em vez de -d @
- Shell época atual: date +%s (segundos), date +%s%3N (ms, apenas GNU)
- Biblioteca C: time_t t = time(NULL); struct tm *u = gmtime(&t); strftime(buf, sizeof(buf), '%Y-%m-%dT%H:%M:%SZ', u);
- Biblioteca C: timegm(struct tm *) retorna um time_t para uma hora de calendário UTC
- POSIX time_t: com sinal de 32 bits estoura em 2038-01-19; o time_t de 64 bits é a solução moderna
Tempo epoch do Linux, marca de tempo do Linux para hora, conversor Linux online
Variantes: «linux epoch time» (tempo Unix no Linux), «linux timestamp to time» (epoch → relógio de parede), «linux timestamp converter online» (esta página).
- Linux epoch time / linux epoch time — igual ao tempo Unix; valor atual: date +%s
- Linux timestamp to time / linux timestamp to time — date -u -d @1700000000 retorna a hora de relógio de parede em UTC
- Linux timestamp converter online / linux timestamp converter online — esta página é o equivalente no navegador de date(1)
FAQ
- Que tipo devo usar para marcas de tempo Unix em C?
- Use time_t para precisão de segundos e int64_t (de <stdint.h>) quando precisar armazenar milissegundos ou nanossegundos. Evite int ou long porque seus tamanhos dependem da plataforma.
- Como obtenho milissegundos em C?
- Use clock_gettime(CLOCK_REALTIME, &ts) de <time.h>. O resultado está em ts.tv_sec (segundos) e ts.tv_nsec (nanossegundos). Calcule os milissegundos como ts.tv_sec * 1000LL + ts.tv_nsec / 1000000.