C#使用時間戳


前言

參考博客

C#獲取和轉換時間戳:

https://blog.csdn.net/weixin_39885282/article/details/79462443

獲取時間戳:

https://www.cnblogs.com/xiangxisheng/p/12364423.html

Convert.ToInt64(Double):

https://docs.microsoft.com/zh-cn/dotnet/api/system.convert.toint64?view=netcore-3.1#System_Convert_ToInt64_System_Double_

示例

獲取時間戳

關於Ticks和TimeSpan

使用過程中發現了一個問題,TimeSpan獲取的10位和13位時間戳有時候會存在差異。

建議使用Ticks去整除得到時間戳。

原因:Convert.ToInt64(Double),對小數的保留規則導致數據會有偏差

使用Ticks

        static void Test7()
        {
            //1970-01-01的Ticks值
            long tStart = 621355968000000000;
            //方法1,直接相減
            long ts1 = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).Ticks;
            //方法2,將當前時間轉換為Utc時間,再減
            long ts2 = DateTime.Now.ToUniversalTime().Ticks - tStart;
            //方法3,直接獲取當前Utc時間,再減
            long ts3 = DateTime.UtcNow.Ticks - tStart;


            var ret1 = ts1 / 10000000;
            var ret2 = ts1 / 10000;

            Console.WriteLine(ret1);//10位
            Console.WriteLine(ret2);//13位
        }

運行結果

 使用TimeSpan

        /// <summary>
        /// 獲取時間戳,TimeSpan
        /// </summary>
        static void Test6()
        {
            //1970-01-01的Ticks值
            long tStart = 621355968000000000;
            //方法1,直接相減
            TimeSpan ts1 = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            //方法2,將當前時間轉換為Utc時間,再減
            TimeSpan ts2 = new TimeSpan(DateTime.Now.ToUniversalTime().Ticks - tStart);
            //方法3,直接獲取當前Utc時間,再減
            TimeSpan ts3 = new TimeSpan(DateTime.UtcNow.Ticks - tStart);

            var ret1 = Convert.ToInt64(ts1.TotalSeconds);
            var ret2 = Convert.ToInt64(ts1.TotalMilliseconds);

            Console.WriteLine(ret1);//10位
            Console.WriteLine(ret2);//13位
        }

運行結果

轉換時間戳

        static void Test8()
        {
            long ret1 = 1593488038;
            long ret2 = 1593488038297;
            var ret10 = ret1 * 10000000;
            var ret20 = ret2 * 10000;
            DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));

            TimeSpan ts1 = new TimeSpan(ret10);
            var dt1 = dtStart.Add(ts1);
            TimeSpan ts2 = new TimeSpan(ret20);
            var dt2 = dtStart.Add(ts2);

            Console.WriteLine(dt1.ToString("yyyy-MM-dd HH:mm:ss.ffff"));
            Console.WriteLine(dt2.ToString("yyyy-MM-dd HH:mm:ss.ffff"));
        }

運行結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM