Há esse código de exemplo, mas ele começa a falar sobre problemas de milissegundos / nanossegundos.
A mesma pergunta está no MSDN, segundos desde a época do Unix em C # .
Isto é o que eu tenho até agora:
public Double CreatedEpoch
{
get
{
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime();
TimeSpan span = (this.Created.ToLocalTime() - epoch);
return span.TotalSeconds;
}
set
{
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime();
this.Created = epoch.AddSeconds(value);
}
}
DateTimeOffset.FromUnixTimeSeconds
eDateTimeOffset.ToUnixTimeSeconds
métodos. Existem métodos para milissegundos em tempo unix também.Respostas:
Aqui está o que você precisa:
Ou, para Java (que é diferente porque o registro de data e hora está em milissegundos, não segundos):
fonte
dtDateTime.AddMilliseconds(javaTimeStamp).ToLocalTime();
static DateTimeOffset.FromUnixMilliseconds
eDateTimeOffset.ToUnixMilliseconds
.A versão mais recente do .NET (v4.6) adicionou suporte interno para conversões de horário do Unix. Isso inclui o horário de e para o Unix representado por segundos ou milissegundos.
DateTimeOffset
:DateTimeOffset
tempo Unix em segundos:DateTimeOffset
:DateTimeOffset
para o tempo Unix em milissegundos:Nota: Esses métodos são convertidos para e de um UTC
DateTimeOffset
. Para obter umaDateTime
representação, basta usar as propriedadesDateTimeOffset.UtcDateTime
ouDateTimeOffset.LocalDateTime
:fonte
ToLocalTime
se quiser.long unixMilliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();
Data e hora para UNIX:
fonte
Da Wikipedia :
Então este é o meu código:
fonte
Cuidado, se você precisar de precisão maior que milissegundos!
Os métodos .NET (v4.6) (por exemplo, FromUnixTimeMilliseconds ) não fornecem essa precisão.
AddSeconds e AddMilliseconds também cortam os microssegundos no dobro.
Estas versões têm alta precisão:
Unix -> DateTime
DateTime -> Unix
fonte
UnixTimestampToDateTime
, o fornecidounixTime
ainda está em segundos, certo?Consulte IdentityModel.EpochTimeExtensions
fonte
DateTime.Ticks
ser Int64 (longo), então eles estão evitando um elenco extra sem controle.Para complementar a resposta de ScottCher, recentemente me vi no cenário irritante de ter carimbos de data e hora UNIX de segundos e milissegundos arbitrariamente misturados em um conjunto de dados de entrada. O código a seguir parece lidar bem com isso:
fonte
A conversão de hora Unix é nova no .NET Framework 4.6.
Agora você pode converter mais facilmente valores de data e hora de ou para tipos do .NET Framework e hora do Unix. Isso pode ser necessário, por exemplo, ao converter valores de tempo entre um cliente JavaScript e um servidor .NET. As seguintes APIs foram adicionadas à estrutura DateTimeOffset :
fonte
Encontrei a resposta certa apenas comparando a conversão com 1/1/1970 sem o ajuste da hora local;
fonte
// 1510396991
// [11.11.2017 10:43:11 +00: 00]
fonte
No .net 4.6, você pode fazer isso:
fonte
Obviamente, é possível tornar
unixEpoch
uma estática global, portanto, ela só precisa aparecer uma vez no seu projeto e pode ser usadaAddSeconds
se o tempo do UNIX for em segundos.Para seguir o outro caminho:
Trunque para Int64 e / ou use
TotalSeconds
conforme necessário.fonte
Escreveu uma extensão mais simples que funciona para nós. Se alguém procura ...
fonte
fonte
Um tick do Unix é de 1 segundo (se bem me lembro) e o tick do .NET é de 100 nanossegundos.
Se você encontrar problemas com nanossegundos, tente usar AddTick (valor 10000000 *).
fonte
I necessário para converter uma struct timeval (segundos, microssegundos) contendo
UNIX time
aDateTime
sem perder precisão e não encontramos uma resposta aqui, então eu pensei que eu só poderia adicionar meu:fonte
Você pode usar DateTimeOffset .
Por exemplo. Eu tenho o objeto DateTime
Se eu quiser converter os carimbos de data e hora em Unix, posso obter o seguinte
Para obter mais informações, visite este link: DateTimeOffset.ToUnixTimeSeconds
fonte
você pode chamar UnixTime.UnixTimeToDateTime (data e hora dupla))
fonte
Para o .NET 4.6 e posterior:
fonte