C#知識點講解之DateTime類、時區和時間戳

今天來講一講《DateTime類、時區和時間戳》

先上乾貨

關於時區
指地球上的一塊區域使用的同一時間定義,以經度劃分,每個時區橫跨15經度,總共24個時區,東西各12個時區,北京時間是東八區。

關於時間戳
指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現在的總秒數。
時間戳和時區沒有關係。時間戳在哪個時區都是一樣的,它只是一個計數。但大家的起始時間不同,所以同一個時間戳在不同時區轉換後的時間不同。我們可以通過時間戳和時區去計算當前時區的時間。

比如舉個灰常簡單的栗子,當前時間戳是0(意思就是經過了0秒)那麼,將這個時間戳在格林威治轉換就是1970年01月01日00時00分00秒;在北京時間轉換就是1970年01月01日08時00分00秒。

關於DateTime類:

以下內容均以北京時間(東八區)爲例,東八區的意思就是格林威治00:00時,北京時間時08:00

using System;

//假設當前時間是2020年5月5日8時整。則以下內容的輸出結果爲:
DateTime time1 = DateTime.Now;  //獲取當前系統時間對象(本地時間)
DateTime time2 = DateTime.Now.ToUniversalTime();  //將當前 DateTime 對象的值轉換爲協調世界時 (UTC)(格林威治時間)
Debug.Log(time1.Hour);  //8
Debug.Log(time2.Hour);  //0(我們比世界時快8個小時)

/*另外一個常用的屬性Ticks,獲取表示此實例的日期和時間的計時週期數
( 1 秒內有 1,000 萬個計時週期, 所有經常看到 .Ticks/10000000 這種,後面講)
如果 DateTime 對象的 Kind 屬性設置爲 Local,則其刻度表示由當前時區設置指定的本地時間中自公元1年1月1日00:00:00 開始的時間。 
如果 DateTime 對象的 Kind 屬性設置爲 Utc,則其刻度表示自公元1年1月1日00:00:00 的時間,從協調世界時算起
如果 DateTime 對象的 Kind 屬性設置爲 Unspecified,則其刻度表示未知時區中從公元1年1月1日00:00:00  開始經過的時間
*/

Debug.Log(time1.Ticks - time2.Ticks);  //28800(仍然8小時)


//獲取時間戳
1、time2.Ticks / 10000000 - 62135596800  //要轉換爲協調世界時後的纔是準確的。62135596800是公元1年與公元1970年相差的時間
2、time1.Ticks / 10000000 - 62135596800  //這個獲取的時間戳會比正常時間快8個小時,因爲起始時間都是從公元1年1月1日00:00:00 開始計算的,要減去時區偏差纔是正常的時間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章