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時間戳
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); }