zoukankan      html  css  js  c++  java
  • 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"));
            }

    运行结果

  • 相关阅读:
    Rust语言学习笔记(11)
    Rust语言学习笔记(10)
    Rust语言学习笔记(9)
    Rust语言学习笔记(8)
    趣味编程:静夜思(Rust版)
    Python sorted()
    Python 魔法方法
    Python filter()
    Python的map和reduce
    Python函数的参数
  • 原文地址:https://www.cnblogs.com/masonblog/p/13213167.html
Copyright © 2011-2022 走看看