将 DateTime 转换为 Unix 时间戳格式

0 c#

我再次来找你,因为我搜索了所有堆栈,并且发现了一些类似的主题,无论如何没有人在处理我的情况。我请求你在一件事上支持我。我有这个代码:

static class UnixTime {
    private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
    private static readonly long MaxUnixSeconds = (long)((DateTime.MaxValue - UnixEpoch).TotalSeconds);
    private const double LongAdj = 1000.0;
    public static DateTime ToDateTime(long unixTimeStamp) { return UnixEpoch.AddSeconds(unixTimeStamp / LongAdj); }
    public static long FromDateTime(DateTime date) { return (long)((date - UnixEpoch).TotalSeconds * LongAdj); }

    public static void Test(long n) {
        System.Diagnostics.Debug.WriteLine("UNIX Time = " + n);
        var dt = ToDateTime(n);
        System.Diagnostics.Debug.WriteLine("DateTime = " + dt);
        var fromDt = FromDateTime(dt);
        System.Diagnostics.Debug.WriteLine("UNIX Time = " + fromDt);
        System.Diagnostics.Debug.WriteLine("IsGood = " + (n==fromDt));
    }

    public static void Test() { Test(1300123800440); }
}
Run Code Online (Sandbox Code Playgroud)

它的输出是:

UNIX Time = 1300123800440
DateTime = 3/14/2011 5:30:00 PM
UNIX Time = 1300123800440
IsGood = True
Run Code Online (Sandbox Code Playgroud)

它工作得很好。无论如何,我从上面的代码中提取了我需要传递日期时间作为参数并获取 Unix 时间戳的代码,不幸的是它给了我不好的结果:

我确实是这样的:

public static long ConvertDateTimeTo(string date)
        {
            const double LongAdj = 1000.0;
            DateTime mydate = Convert.ToDateTime(date);
            DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
            return (long)((mydate - UnixEpoch).TotalSeconds * LongAdj);
        }
Run Code Online (Sandbox Code Playgroud)

使用:

Console.WriteLine(ConvertDateTimeTo("14.03.2011 5:30 PM"));
Run Code Online (Sandbox Code Playgroud)

输出(应该是 1300123800440)但我收到:

1300123800000
Run Code Online (Sandbox Code Playgroud)

你能帮我解决这里出了什么问题吗?

小智 5

你可以试试这个

static void Main(string[] args)
        {
            Console.WriteLine(DateTime.Now);
            Console.ReadLine();
        }

        public static long ToUnixTimestamp( DateTime target)
        {
            var date = new DateTime(1970, 1, 1, 0, 0, 0, target.Kind);
            var unixTimestamp = System.Convert.ToInt64((target - date).TotalSeconds);

            return unixTimestamp;
        }

        public static DateTime ToDateTime( DateTime target, long timestamp)
        {
            var dateTime = new DateTime(1970, 1, 1, 0, 0, 0, target.Kind);

            return dateTime.AddSeconds(timestamp);
        }
Run Code Online (Sandbox Code Playgroud)

编辑

这对我有用

在这里找到它: http://hassakarn.com/2012/10/10/convert-datetime-to-unix-timestamp-in-c/