.NET Ticks Converter

Conversor de .NET Ticks para timestamp Unix

Converta .NET Ticks em tempo Unix com a fórmula exata e suporte para valores grandes. Saída em segundos, milissegundos, ISO 8601 e formato legível.

intervalos de 100 ns desde 01-01-0001

Hora atual — Ticks de .NET DateTime
Timestamp Unix (s)

O que são ticks do .NET?

No .NET, DateTime.Ticks e TimeSpan.Ticks medem o tempo em unidades de 100 nanossegundos. Uma contagem de ticks de DateTime é o número de intervalos de 100 nanossegundos desde 00:00:00 de 1º de janeiro de 0001 no calendário gregoriano proléptico.

  • Época: 0001-01-01 00:00:00
  • Resolução: ticks de 100 nanossegundos (10.000.000 por segundo)
  • Um valor atual gira em torno de 6,4 × 10^17
  • C#: DateTime.UtcNow.Ticks, DateTimeOffset.UtcNow.Ticks

Como converter ticks do .NET em uma marca de tempo Unix

Há 62.135.596.800 segundos entre 0001-01-01 e 1970-01-01. Divida os ticks por 10.000.000 para obter segundos desde o ano 1 e depois subtraia esse deslocamento.

  • Unix seconds = Ticks / 10000000 − 62135596800
  • Unix milliseconds = Ticks / 10000 − 62135596800000
  • Exemplo: 638355968000000000 → 1700000000 → 2023-11-14 22:13:20 UTC
  • Em C#: new DateTimeOffset(dt).ToUnixTimeSeconds() faz isso por você

Código C# e casos extremos

O .NET moderno oferece DateTimeOffset.ToUnixTimeSeconds() e ToUnixTimeMilliseconds(), e DateTimeOffset.FromUnixTimeSeconds() para a direção inversa. Use ticks diretamente apenas ao interoperar com dados serializados. Observe que DateTime.Ticks ignora o DateTimeKind, então sempre normalize para UTC primeiro.

  • C#: var unixSeconds = new DateTimeOffset(dt.ToUniversalTime()).ToUnixTimeSeconds();
  • C#: var dt = DateTimeOffset.FromUnixTimeMilliseconds(ms).UtcDateTime;
  • Ticks de 0 = 0001-01-01; DateTime.MaxValue.Ticks = 3155378975999999999
  • Os valores excedem os inteiros seguros do JavaScript, por isso este conversor usa BigInt

Conversores de formato de marca de tempo relacionados

Notas sobre bibliotecas e serialização

Os ticks aparecem em formatos de serialização antigos do .NET e em convenções JSON. Fique atento a:

  • Datas JSON legadas da Microsoft: "/Date(1700000000000+0000)/" envolvem milissegundos (não ticks)
  • DateTimeOffset.UnixEpoch é o ponto zero padrão no .NET moderno
  • DateTime.MaxValue.Ticks = 3155378975999999999; valores tão altos quase certamente indicam uma sentinela de «nunca»
  • TimeSpan.Ticks é a mesma unidade, mas medida como duração; não subtraia cegamente um tick de DateTime de um tick de TimeSpan
  • Newtonsoft.Json e System.Text.Json usam ISO 8601 por padrão — prefira isso a ticks crus quando puder escolher

FAQ

Quantos ticks há em um segundo?
Exatamente 10.000.000 de ticks — cada tick é 100 nanossegundos.
Qual é a diferença entre os ticks do .NET e o FILETIME do Windows?
Ambos usam unidades de 100 nanossegundos, mas os ticks do .NET contam a partir de 0001-01-01 enquanto o FILETIME conta a partir de 1601-01-01. Eles diferem por um deslocamento fixo de 504.911.232.000.000.000 ticks.
Como obtenho o tempo Unix a partir de um DateTime do C#?
Use new DateTimeOffset(dateTime.ToUniversalTime()).ToUnixTimeSeconds() ou .ToUnixTimeMilliseconds().