981 Stimmen

Wie kann ich einen Unix-Zeitstempel in DateTime umwandeln und umgekehrt?

Es gibt diesen Beispielcode, aber dann geht es um Millisekunden-/Nanosekundenprobleme.

Die gleiche Frage wird auf MSDN gestellt, Sekunden seit der Unix-Epoche in C# .

Das ist der Stand der Dinge:

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);
  }
}

176 Stimmen

Die kommende .NET 4.6 (das noch in diesem Jahr veröffentlicht werden soll) wird diese Unterstützung eingeführt. Siehe DateTimeOffset.FromUnixTimeSeconds y DateTimeOffset.ToUnixTimeSeconds Methoden. Es gibt auch Methoden für Millisekunden Unix-Zeit.

7 Stimmen

Eine weitere Ergänzung war DateTime.UnixEpoch . Es sei denn, Sie brauchen eine DateTimeOffset anstelle einer DateTime denke ich. DateTime.UnixEpoch.AddMilliseconds(...) hat eine etwas bessere Lesbarkeit als DateTimeOffset.FromUnixTimeMilliseconds(...).UtcDateTime .

1258voto

ScottCher Punkte 13967

Hier ist, was Sie brauchen:

public static DateTime UnixTimeStampToDateTime( double unixTimeStamp )
{
    // Unix timestamp is seconds past epoch
    DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
    dateTime = dateTime.AddSeconds( unixTimeStamp ).ToLocalTime();
    return dateTime;
}

Oder für Java (was anders ist, weil der Zeitstempel in Millisekunden und nicht in Sekunden angegeben wird):

public static DateTime JavaTimeStampToDateTime( double javaTimeStamp )
{
    // Java timestamp is milliseconds past epoch
    DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
    dateTime = dateTime.AddMilliseconds( javaTimeStamp ).ToLocalTime();
    return dateTime;
}

632voto

i3arnon Punkte 106489

El neueste Version von .NET (v4.6) hat eine eingebaute Unterstützung für Unix-Zeitkonvertierungen hinzugefügt. Dies umfasst sowohl die Umrechnung von und nach Unix-Zeit, die entweder in Sekunden oder Millisekunden dargestellt wird.

  • Unix-Zeit in Sekunden zu UTC DateTimeOffset :

    DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(1000);

  • DateTimeOffset in Unix-Zeit in Sekunden:

    long unixTimeStampInSeconds = dateTimeOffset.ToUnixTimeSeconds();

  • Unix-Zeit in Millisekunden zu UTC DateTimeOffset :

    DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(1000000);

  • DateTimeOffset in Unix-Zeit in Millisekunden:

    long unixTimeStampInMilliseconds = dateTimeOffset.ToUnixTimeMilliseconds();


Hinweis: Diese Methoden konvertieren in und aus einer UTC DateTimeOffset . Um eine DateTime Darstellung verwenden Sie einfach die DateTimeOffset.UtcDateTime o DateTimeOffset.LocalDateTime Eigenschaften:

DateTime dateTime = dateTimeOffset.UtcDateTime;

226voto

Dmitry Fedorkov Punkte 4151

DateTime in UNIX-Zeitstempel:

public static double DateTimeToUnixTimestamp(DateTime dateTime)
{
    return (TimeZoneInfo.ConvertTimeToUtc(dateTime) - 
           new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc)).TotalSeconds;
}

52voto

Ramil Aliyev Punkte 3280

Sie können verwenden DateTimeOffset .

Zum Beispiel. Ich habe ein DateTime-Objekt

var dateTime1 = DateTime.Now;

Wenn ich sie in Unix-Zeitstempel umwandeln möchte, kann ich das wie folgt tun

var unixTimeSeconds = new DateTimeOffset(dateTime1).ToUnixTimeSeconds()

Wenn Sie unix timeStamp in normale DateTime konvertieren wollen, können Sie dieses Codestück verwenden:

var dateTime2 = DateTimeOffset.FromUnixTimeSeconds(unixTimeSeconds).LocalDateTime;

o

var dateTime2 = DateTimeOffset.FromUnixTimeSeconds(unixTimeSeconds).UtcDateTime;

Für weitere Informationen besuchen Sie bitte diesen Link:

DateTimeOffset.ToUnixTimeSeconds Methode ,
DateTimeOffset.FromUnixTimeSeconds

49voto

gl051 Punkte 561

Von Wikipedia :

Die UTC ändert sich nicht mit dem Wechsel der Jahreszeiten, aber die Ortszeit oder die bürgerliche Zeit kann sich ändern, wenn in einer Zeitzone die Sommerzeit gilt (Sommerzeit). So liegt die Ortszeit an der Ostküste der Vereinigten Staaten im Winter fünf Stunden hinter der UTC zurück, aber vier Stunden, wenn dort Sommerzeit gilt.

Dies ist also mein Code:

TimeSpan span = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0,DateTimeKind.Utc));
double unixTime = span.TotalSeconds;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X