c# 以 utc 1970-1-1 獲取時間戳


1.時間點轉換

由於c#的時間戳基准點為 utc 1601-1-1,我們必須自己做一次轉換

//創建 utc 1970-1-1時間點 
DateTime dateTimeUtc1970 = Convert.ToDateTime("1970-1-1");  

//從 utc 1970-1-1時間點 拿到 Ticks,這個是 utc 1601-1-1 到 utc 1970-1-1 的 Ticks
long Utc_1601_1970_Ticks = dateTimeUtc1970.ToUniversalTime ().Ticks;

//獲取當前 utc 時間的 Ticks ,這個是 utc 1601-1-1 到 utc now 的Ticks
long Utc_1601_Now_Ticks = System.DateTime.UtcNow.ToUniversalTime ().Ticks;

//兩個時間戳 相減獲得 utc 1970-1-1  到 utc now 的Ticks
long Utc_1970_now_Ticks = Utc_1601_Now_Ticks - Utc_1601_1970_Ticks;

 由於 utc 1601-1-1 到 utc 1970-1-1 的 Ticks 是固定不變的(Ticks = 621355968000000000),我們沒有必要每次都做一次轉換所以有

long Utc_1970_now_Ticks = System.DateTime.UtcNow.ToUniversalTime ().Ticks - 621355968000000000;

2.單位轉換

因為 Ticks 的單位是 100 納秒 ,1Tick = 100 納秒

(10 ticks = microseconds 微秒 ,s(秒)、ms(毫秒)、μs(微秒)、ns(納秒),其中:1s=1000ms,1 ms=1000μs,1μs=1000ns)

所以有

ticks / 10000000 = 秒

ticks / 10000 = 毫秒

3.總結

為了和其他語言的時間戳匹配可以封裝下面方法

/* 獲取 utc 1970-1-1到現在的秒數 */
long Get1970ToNowSeconds(){
	return  (System.DateTime.UtcNow.ToUniversalTime ().Ticks - 621355968000000000)/ 10000000;
}
/* 獲取 utc 1970-1-1到現在的毫秒數 */
long Get1970ToNowMilliseconds(){
	return  (System.DateTime.UtcNow.ToUniversalTime ().Ticks - 621355968000000000)/ 10000;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM