簡體   English   中英

將 DateTime 轉換為 Unix 時間戳格式

[英]Convert DateTime to Unix timestamp format

我再次來找你,因為我搜索了所有堆棧,然后找到了一些類似的主題,無論如何沒有人在我的情況下工作。 我請你在一件事上支持我。 我有這個代碼:

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

它的輸出是:

UNIX Time = 1300123800440
DateTime = 3/14/2011 5:30:00 PM
UNIX Time = 1300123800440
IsGood = True

它的工作真的很好。 無論如何,我從上面的代碼中提取了一個我需要將日期時間作為參數傳遞並獲得 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);
        }

用:

Console.WriteLine(ConvertDateTimeTo("14.03.2011 5:30 PM"));

輸出(應該是 1300123800440)但我收到:

1300123800000

你能幫我看看這里出了什么問題嗎?

你可以試試這個

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

編輯

這對我有用

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

看看這個:

public static void Test() { Test(13001238000000); }

給出:

Debug Trace: 
UNIX Time = 1300123800000 
DateTime = 2011-03-14 17:30:00
UNIX Time = 1300123800000 
IsGood = True

你的差異太小了,它是 440 毫秒,而且你不是在做 Unix 時間。 Unix-time 是經過的秒數,而不是自 1970-01-01 以來經過的毫秒數。

澄清一下,您獲得相同“日期字符串”的原因是因為您只在日期字符串中顯示秒,而不是毫秒。

以毫秒為單位將 UTC 日期時間轉換為 Unix/GMT/UTC 時間戳,請嘗試以下函數。

public static long getUTCTimeInMilliseconds(DateTime utcDT)
        {
            DateTime convertedDate = DateTime.SpecifyKind(utcDT, DateTimeKind.Utc);
            return new DateTimeOffset(convertedDate).ToUnixTimeMilliseconds();
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM