Mai mult
Cum pot converti un Unix timestamp să DateTime și vice-versa?
Există acest exemplu de cod, dar apoi începe să vorbească despre milisecundă / nanosecundă probleme.
Aceeași întrebare este pe MSDN, Secunde de la epoca Unix în C#.
Aceasta este ceea ce am'am primit până acum:
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);
}
}
707
18
Aici's de ce ai nevoie:
Sau, pentru Java (care este diferit, deoarece timestamp este în milisecunde, nu secunde):
A mai recentă versiune de .NET (v4.6) și-a adăugat built-in de sprijin pentru Unix conversii în timp. Care include atât la și de la Unix, reprezentate de secunde sau milisecunde.
DateTimeOffset
:DateTimeOffset
:Notă: Aceste metode de a converti la și de la un UTC
DateTimeOffset
. Pentru a obține un "DateTime" reprezentare pur și simplu utilizațiDateTimeOffset.UtcDateTime " sau " DateTimeOffset.LocalDateTime
properties:DateTime pentru UNIX timestamp:
De Wikipedia:
Deci, acesta este codul meu:
Fii atent, dacă aveți nevoie de o precizie mai mare decât milisecunde!
.NET (v4.6) metode (de exemplu, FromUnixTimeMilliseconds) nu't oferi această precizie.
AddSeconds și AddMilliseconds de asemenea, taie microsecunde, în dublu.
Aceste versiuni au ridicat de precizie:
Unix -> DateTime
DateTime -> Unix
Vezi IdentityModel.EpochTimeExtensions
Pentru a completa ScottCher's a răspuns, recent m-am trezit într-enervant scenariu de a avea atât de secunde și milisecunde UNIX timestamp arbitrar amestecate împreună într-un set de date de intrare. Codul de mai jos pare să se ocupe de acest bine:
Unix timpul de conversie este nou în .NET Framework 4.6.
Acum puteți converti cu ușurință mai multe valori de dată și timp către sau de la .NET Framework tipuri și de timp Unix. Acest lucru poate fi necesar, de exemplu, atunci când conversia valorilor de timp între un client JavaScript și .Server de NET. Următoarele Api-uri au fost adăugate la DateTimeOffset structura:
Am găsit răspunsul corect doar prin compararea conversie a 1/1/1970 w/o locale timp de ajustare;
// 1510396991
// [11.11.2017 10:43:11 +00:00]
Desigur, se poate face unixEpoch un globale statice, astfel încât trebuie să apară o singură dată în proiect, și se poate folosi
AddSeconds
dacă timpul UNIX este în secunde.Pentru a merge în altă parte:
Truncate la Int64 și/sau de a folosi
TotalSeconds
după cum este necesar.Un Unix capusa este de 1 secundă (dacă îmi amintesc bine), si un .NET capusa este 100 nanosecunde.
Daca'am fost întâmpină probleme cu nanosecunde, ați putea dori să încercați să utilizați AddTick(10000000 * valoare).
De la .net de 4,6, puteți face acest lucru:
Am nevoie pentru a converti o struct timeval (secunde, microsecunde) cu conținut de
timp UNIX
a "DateTime", fără a pierde din precizie și am't a găsit un răspuns aici, așa că am crezut că am putea adăuga mea:Scrise o simplă extensie care lucrează pentru noi. Dacă cineva se uită de el...
puteți apela UnixTime.UnixTimeToDateTime(dublu datetime))
Pentru .NET 4.6 și mai târziu: