这里有一个示例代码,但是它开始讨论毫秒/纳秒的问题。

同样的问题出现在MSDN上,从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);
  }
}

当前回答

在。net 4.6中,你可以这样做:

var dateTime = DateTimeOffset.FromUnixTimeSeconds(unixDateTime).DateTime;

其他回答

Unix时间转换是. net Framework 4.6中的新功能。

现在,您可以更轻松地将日期和时间值转换为. net Framework类型和Unix时间。这可能是必要的,例如,在JavaScript客户机和. net服务器之间转换时间值时。DateTimeOffset结构中添加了以下api:

static DateTimeOffset FromUnixTimeSeconds(long seconds)
static DateTimeOffset FromUnixTimeMilliseconds(long milliseconds)
long DateTimeOffset.ToUnixTimeSeconds()
long DateTimeOffset.ToUnixTimeMilliseconds()

在c# 8.0(。NET Core 2.1)它是一个简单的一行代码:

DateTime.UnixEpoch.AddSeconds(unixTimeInSeconds)
var dt = DateTime.Now; 
var unixTime = ((DateTimeOffset)dt).ToUnixTimeSeconds();

// 1510396991

var dt = DateTimeOffset.FromUnixTimeSeconds(1510396991);

// [11.11.2017 10:43:11 +00:00]

我找到了正确的答案,只是通过比较转换到1/1/1970 w/o当地时间调整;

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;

我需要将包含UNIX时间的timeval结构体(秒,微秒)转换为DateTime而不损失精度,在这里还没有找到答案,所以我想我只是可能会添加我的:

DateTime _epochTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
private DateTime UnixTimeToDateTime(Timeval unixTime)
{
    return _epochTime.AddTicks(
        unixTime.Seconds * TimeSpan.TicksPerSecond +
        unixTime.Microseconds * TimeSpan.TicksPerMillisecond/1000);
}