关于时间戳的理解

时间戳的定义一般是指 ,即自从 Unix 纪元(格林威治时间1970 年 1 月 1 日 00:00:00)到当前时间的秒数。

因此,理论上来说和时区无关,同一时刻不同时区计算的时间戳应该是一样的,不存在什么本地时间戳概念,

如果要将本地时间转成时间戳,就需要先将本地时间转成utc时间,然后再减去1970年1月1日

如果将时间戳转成本地时间,可以把utc1970年1月1日转成本地时间,再加上秒数

复制代码
        public void Test() {
            DateTime dt = new DateTime(2024, 2, 28);
            Console.WriteLine(dt);
            long timestamp = ToUnixTimestampForLocalTime(dt);
            Console.WriteLine(timestamp);
            DateTime dt_result = ToLocalTimeForUnixTimestamp(timestamp);
            Console.WriteLine(dt_result);
            Console.WriteLine(dt == dt_result);
        }
        /// <summary>
        /// 
        /// </summary>
        readonly DateTime time1970 = new DateTime(1970, 1, 1);
        /// <summary>
        /// 时间戳的起始时间点的本地时间,北京时间多8个小时
        /// </summary>
        readonly DateTime time1970_local = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
        /// <summary>
        /// 将本地时间转成Unix时间戳
        /// </summary>
        public long ToUnixTimestampForLocalTime(DateTime dt) {
            return (long)(dt.ToUniversalTime() - time1970).TotalSeconds;
        }
        /// <summary>
        /// 将Unix时间戳转成本地时间
        /// </summary> 
        public DateTime ToLocalTimeForUnixTimestamp(long timestamp) {
            return time1970_local.AddSeconds(timestamp);
        }
复制代码

 

posted @   WmW  阅读(87)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示