.NET / C# 时间与时间戳的转换

时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总毫秒数。
我们在计算时间戳时应为1970年01月01日到指定时间。
应当注意世界时间与本地时间的区别,不然结果可能存在偏差。
PS:以下示例代码返回时间戳均为13位(故被转换的时间戳同为13位,13位结果即总毫秒数不同需求请自觉转换)。
在某些情况下会出现时间戳显示结果与预期结果略有偏差,合理运用本地时间与世界时间的偏移量即可解决。
      /// <summary>
        /// 获取本地时间的世界时间戳
        /// </summary>
        /// <returns></returns>
        public long GetNowTimeStamp()
        {
            var TimeStamps = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
            return TimeStamps;
        }
        /// <summary>
        /// 将时间转换为时间戳
        /// </summary>
        /// <param name="dateTime"></param>
        /// <returns></returns>
        public long ToTimeStamp(DateTime dateTime)
        {
            var TimeStamps = (dateTime.Ticks - 621355968000000000) / 10000000;
            return TimeStamps;
        }
        /// <summary>
        /// 获取本地时间的世界时间的偏移量
        /// </summary>
        /// <returns></returns>
        public long GetUtcOffsets()
        {
            var UtcOffsets = TimeZone.CurrentTimeZone.GetUtcOffset(new DateTime()).Ticks / 10000;
            return UtcOffsets;
        }

        /// <summary>
        /// 将时间戳转换为时间
        /// </summary>
        /// <returns></returns>
        public DateTime ToDateTime(long TimeStamps)
        {
            var date = new DateTime(1970, 1, 1).AddMilliseconds(TimeStamps);
            //new DateTime().AddMilliseconds(621355968000000000/10000).AddMilliseconds(TimeStamps);//效果同上
            return date;
        }

posted on 2019-09-20 11:59  进击の咸鱼  阅读(6022)  评论(0编辑  收藏  举报

导航