Hoe kan ik een Unix-tijdstempel omzetten naar DateTime en vice versa?

Er is deze voorbeeldcode, maar dan begint het over milliseconde / nanoseconde problemen.

Dezelfde vraag staat op MSDN, Seconden sinds de Unix epoche in C#.

Dit is wat ik'heb tot nu toe:

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

Dit is wat je nodig hebt:

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

Of, voor Java (wat anders is omdat de timestamp in milliseconden is, niet seconden):

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

Ik vond het juiste antwoord door de conversie te vergelijken met 1/1/1970 zonder de lokale tijd aanpassing;

DateTime date = new DateTime(2011, 4, 1, 12, 0, 0, 0);
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0);
TimeSpan span = (date - epoch);
double unixTime =span.TotalSeconds;
Commentaren (0)

Een Unix tick is 1 seconde (als ik me goed herinner), en een .NET tick is 100 nanoseconden.

Als je'problemen hebt met nanoseconden, zou je kunnen proberen AddTick(10000000 * waarde) te gebruiken.

Commentaren (1)