转换为Unix时间戳无效

时间:2017-07-26 18:19:29

标签: c# datetime

我正在尝试将DateTime转换为Unix时间戳。

static long ToUnixTime(DateTime dateTime)
  {
      var dateTimeOffset = new DateTimeOffset(dateTime);
       return dateTimeOffset.ToUnixTimeSeconds();
  }

但是这个函数总是返回时间戳等于“Sun Jan 18 1970”而不是当前的DateTime。这有什么问题?

2 个答案:

答案 0 :(得分:2)

表示为Unix时间戳的当前日期为1501093539,或多或少。

我认为你自己错了;如果我编辑我的代码以添加毫秒,我得到1/18/1970。但是unix时间不是毫秒。他们在

var dt = DateTime.Now;
var offset = new DateTimeOffset(dt);
var unix = offset.ToUnixTimeSeconds();

dt = new DateTime(1970,1,1,0,0,0);
dt = dt.AddSeconds(unix);
Debug.WriteLine(dt);        // gives current date back

将其更改为AddSeconds,您将获得当前日期。将其更改为AddMilliseconds,您将获得1970年1月18日。您的代码实际上很好。

答案 1 :(得分:1)

这里有一些代码可以为你提供任何版本的框架的

的Unix时间戳
public static class UnixDateTime
{
    private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);

    public static long GetUnixTimestamp(this DateTime input)
    {
        return (long)(input - UnixEpoch).TotalSeconds;
    }
}

然后只使用扩展方法

var unixTimeStamp = DateTime.Now.GetUnixTimestamp();