ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

我终于搞懂了时间……(C# 中时间类型(DateTime) 时间戳(Unix时间戳)互转)

2022-03-02 15:31:34  阅读:311  来源: 互联网

标签:UTC 00 timestamp DateTime Unix 时间 互转 搞懂


1:

首先要了解的概念:

 如果你看完这篇文章还不懂计算机时间,那就掐死我吧 - 21ic电子网

UTC_GMT_格林威治时间_协调世界时 (beijing-time.org)

协调世界时(UTC)

又称世界统一时间、世界标准时间、国际协调时间、世界协调时间,UTC协调世界时即格林威治平太阳时间,是指格林威治所在地的标准时间,也是表示地球自转速率的一种形式,UTC基于国际原子时间,通过不规则的加入闰秒来抵消地球自转变慢的影响,是世界上调节时钟和时间的主要时间标准。

东八区

UTC/GMT+08:00)是比世界协调时间(UTC)/格林尼治时间(GMT)快8小时的时区,理论上的位置是位于东经112.5度至127.5度之间,在此15度的范围内,统一采用以东经120度中心线的地方时间为准。是东盟标准的其中一个候选时区。当格林尼治标准时间为00:00时,东八区的标准时间为08:00。 

中国基于「世界协调时」再加上 8 小时时区之差,确立了「北京时间」,并广播给整个中国大地使用。

 

unix时间戳

Unix 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。 
Unix 时间戳(英文为 Unix epoch, Unix time, POSIX time 或 Unix timestamp)      

2:

理解以上概念就很清楚:

* 我们通常说的 ”时间戳“ 指的就是 【Unix时间戳】例如: https://tool.lu/timestamp/ https://tool.chinaz.com/tools/unixtime.aspx 在线工具所示。
* 而通过 第一部分了解基本概念后 可得知 【Unix时间戳】 就是 utc 午夜时间开始所经过的秒数,
* 避免一个误区,什么 零时区转换时间戳 还是北京时间转换时间戳,,时间戳就是 时间戳 不管什么时区的时间值 

在 C#中获取一个时间的时间戳就是: 

为什么要减去一个数 又除以 另一个数。 可参考:

 DateTime.Ticks 属性 (System) | Microsoft Docs

 0625-ticks-18位时间戳转换 - 知乎 (zhihu.com)

 

        /// <summary>
        /// 时间转换为Unix时间戳
        /// </summary>
        /// <param name="date"></param>
        /// <returns></returns>
        public static double DateConvertToUnixTimestamp(this DateTime date)
        {
            var unixTimestamp = (date.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
            return unixTimestamp;
        }

 

 时间戳转换时间:

 

        /// <summary>
        /// Unix时间戳转换为时间
        /// </summary>
        /// <param name="timestamp"></param>
        /// <returns></returns>
        public static DateTime UnixTimestampConvertToDate(this double timestamp)
        {
            //DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));//过时的
            //DateTime dtStart = TimeZoneInfo.ConvertTimeFromUtc(new DateTime(1970, 1, 1), TimeZoneInfo.FindSystemTimeZoneById("China Standard Time")); //硬编码时区标识id
            DateTime dtStart = TimeZoneInfo.ConvertTimeFromUtc(new DateTime(1970, 1, 1), TimeZoneInfo.Local); //表示本地时区
            long lTime = long.Parse(timestamp.ToString() + "0000000");
            TimeSpan toNow = new TimeSpan(lTime);
            return dtStart.Add(toNow);
        }

 

标签:UTC,00,timestamp,DateTime,Unix,时间,互转,搞懂
来源: https://www.cnblogs.com/camefor/p/15955153.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有