Eu olhei em volta do stackoverflow e até olhei algumas das perguntas sugeridas e nenhuma parece responder, como você obtém um carimbo de data / hora unix em c #?
c#
timestamp
unix-timestamp
bizzehdee
fonte
fonte
Respostas:
Você obtém um registro de data e hora unix em C # usando
DateTime.UtcNow
e subtraindo o tempo da época de 01-01-2009.por exemplo
DateTime.UtcNow
pode ser substituído por qualquerDateTime
objeto para o qual você gostaria de obter o registro de data e hora unix.Há também um campo,
DateTime.UnixEpoch
que é muito mal documentado pelo MSFT, mas pode ser um substituto paranew DateTime(1970, 1, 1)
fonte
DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).Ticks / TimeSpan.TicksPerSecond;
A partir do .NET 4.6, existe
DateTimeOffset.ToUnixTimeSeconds()
.Este é um método de instância, portanto, você deve chamá-lo em uma instância de
DateTimeOffset
. Você também pode transmitir qualquer instância deDateTime
, embora tenha cuidado com o fuso horário .Para obter o carimbo de data / hora atual:
Para obter o registro de data e hora de
DateTime
:fonte
Int64
- no momento em que rola, não estaríamos mais usando os anos da Terra por falta de uma Terra.DateTimeOffset.Now.ToUnixTimeSeconds()
Você também pode usar carrapatos. Estou codificando para o Windows Mobile, para não ter o conjunto completo de métodos. O TotalSeconds não está disponível para mim.
ou
fonte
new DateTime(1970, 1, 1)
cria um horário comKind
propriedade não especificada . O que você realmente quernew DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
ser verdadeiramente corretaIsto é o que eu uso:
Lembre-se de que esse método retornará a hora como Hora Universal Coordenada (UTC).
fonte
double
tipo, lançando-a longa irá causar perda de precisão.)O truncamento
.TotalSeconds
é importante, pois é definido comothe value of the current System.TimeSpan structure expressed in whole fractional seconds.
E que tal uma extensão para
DateTime
? O segundo é provavelmente mais confuso que vale a pena até que existam extensões de propriedade.fonte
Ao subtrair 1970 do horário atual, lembre-se de que o período de tempo geralmente terá um campo diferente de zero milissegundos. Se, por algum motivo, você estiver interessado em milissegundos, lembre-se disso.
Aqui está o que eu fiz para contornar esse problema.
fonte
É isso que eu uso.
fonte
Eu juntei as abordagens mais elegantes desse método utilitário:
fonte
Esta solução ajudou na minha situação:
usando helper no código:
fonte
Há ToUnixTimeMilliseconds para DateTimeOffset no sistema
Você pode escrever um método semelhante para o DateTime:
10000000L - convertendo ticks em segundos
62135596800L - convertendo 01.01.01 para 01.01.1978
Não há nenhum problema com Utc e vazamentos
fonte
Abaixo está uma classe de extensão bidirecional que suporta:
No caso do OP, o uso é:
ou
Embora exista uma resposta direta, acredito que usar uma abordagem genérica é melhor. Especialmente porque é mais provável que um projeto que precise de uma conversão como essa também precise dessas extensões, então é melhor usar a mesma ferramenta para todos.
fonte
Eu usei isso depois de lutar por um tempo, que também serve para o deslocamento do fuso horário:
fonte
O código simples que estou usando:
Este código está fornecendo um carimbo de data / hora unix, total de milissegundos de 01-01-2009 até agora.
fonte