如何将unix时间戳转换为datetime,反之亦然?


有这个示例代码,但它开始谈论毫秒/纳秒问题。

同样的问题在MSDN上, Seconds since
C#中的Unix时代

这就是我到目前为止:

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

这是你需要的:

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

或者,对于Java(这是不同的,因为时间戳以毫秒为单位,而不是秒):

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

已添加最新版本的.NET(v4.6)内置的Unix时间转换支持。这包括来自Unix时间和以秒或毫秒表示的时间。

  • DateTimeOffset
    的几秒钟内的Unix时间
DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(1000);
  • DateTimeOffset转换为Unix时间(秒):
long unixTimeStampInSeconds = dateTimeOffset.ToUnixTimeSeconds();
  • Unix时间(以毫秒为单位)到DateTimeOffset
DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(1000000);
  • DateTimeOffset转换为Unix时间(毫秒):
long unixTimeStampInMilliseconds= dateTimeOffset.ToUnixTimeMilliseconds();

注意:这些方法可以转换成DateTimeOffsetDateTimeOffset。要获取DateTime表示,只需使用DateTimeOffset.DateTime属性:

DateTime dateTime = dateTimeOffset.UtcDateTime;

未经作者同意,本文严禁转载,违者必究!