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