一、UTC时间
时间格式如下:2018-01-22T09:12:43.083Z 或 2013-11-17T11:59:22+08:00 (此处描述不准确:+08:00后结果是北京时间)
其中z 代表是世界协调时间,即:utc
二、GMT时间
时间格式如下:Thu Oct 16 07:13:48 GMT+08:00 2016
三、Unix时间戳
在计算机中看到的UTC时间都是从(1970年01月01日 0:00:00)开始计算秒数的。所看到的UTC时间那就是从1970年这个时间点起到具体时间共有多少秒。 这个秒数就是Unix时间戳。
四、本地时间
UTC时间加上当前时区即为本地时间
例如:北京当地时间为:UTC时间+08:00
五、GMT与UTC的关联
UTC = GMT +/- 0.9 s 因此 UTC 间中需要进行 "闰秒" 以控制两者相差,在使用过程中如果计算不要求十分精确,可以认为两者等同
六、时间戳
什么是时间戳?是从1970-01-01 00:00:00 到当前时间的所过去的时间的 秒数
在C#中计算时间戳的方法 (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000
621355968000000000 是1-1970年之间的天数,当然不包含1970年的日期了
换算方式如下:
1969*365=718685 天
每4年润一,但是整百年不润,整400才再润,换算出1-1970年有 1968/4-19+19/4=477个闰年
中间经历了477个闰年,每个闰年是366天,所以,从1-1970年之间共拥有 719162天
那么这中间经历了 719162*24*60*60=62,135,596,800 秒
再C# 中 Ticks 的单位是100ns,1s=1000ms=1000000um=1000000000ns
将62,135,596,800 换算成纳秒 62135596800000000000 换算成Ticks 于是得到 621355968000000000
现在我们理解了为什么用Ticks减去那么大一个数字的意思了吧。 因为Ticks是100ns为单位的,所以 Ticks*100得到ns /1000得到微妙 /1000得到 毫秒
Ticks*100/1000,000,000=Ticks/10,000,000 现在最后那个/10 000 000 也不再难以理解了吧