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

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

当前回答

Unix epoch现在是DateTime类的一部分。将millis转换为DateTime非常简单

DateTime.UnixEpoch.AddMilliseconds(millis)

其他回答

DateTime到UNIX时间戳:

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

我找到了正确的答案,只是通过比较转换到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;
System.DateTimeOffset.Now.ToUnixTimeSeconds()
DateTime unixEpoch = DateTime.ParseExact("1970-01-01", "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
DateTime convertedTime = unixEpoch.AddMilliseconds(unixTimeInMillisconds);

当然,可以将unixEpoch设置为全局静态,这样它只需要在项目中出现一次,如果UNIX时间以秒为单位,则可以使用AddSeconds。

反过来说:

double unixTimeInMilliseconds = timeToConvert.Subtract(unixEpoch).TotalMilliseconds;

截断为Int64和/或根据需要使用TotalSeconds。

Unix tick是1秒(如果我没记错的话),net tick是100纳秒。

如果您遇到纳秒的问题,您可能想尝试使用AddTick(10000000 * value)。