关于时间戳的理解

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

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

如果要将本地时间转成时间戳,就需要先将本地时间转成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 @ 2024-02-28 12:02  WmW  阅读(11)  评论(0编辑  收藏  举报