new DateTime(1970, 1, 1)
如上,实际上是 UTC 时间。证据是什么呢?如下:
new DateTime(1970, 1, 1).ToLocalTime()
输出后,可以发现时间是:1970-01-01 08:00:00
new DateTime(1970, 1, 1).ToLocalTime().ToLocalTime().ToLocalTime()
仍然是:1970-01-01 08:00:00,可以看出并不是机械地 +8。
你可能会说:好吧,那为什么我经常用 new DateTime,却没有 UTC 烦恼呢?
实际上,可能是我们在保存、转换时,并没有带上时区,比如入库时,存的是 1900-01-01 00:00:00,并没有记录时区,所以我们一直用这个时间,反正就是这个时间,我们没有去计较是哪个时区,当然就不出问题了。
当然,还有就是微软没把事情搞复杂,比如:日期相减时,不考虑时区
这就是微软把事情简单化的地方了。你要考虑时区,你自己转换再拿来加减,何必埋一个坑呢?
var m = (DateTime.Now - new DateTime(1970, 1, 1)).TotalMinutes;
DateTime.Now 是取的本地时间(咱们中国就是北京时间)(还有个属性 UtcNow)。
new DateTime() 是指 UTC 时间。
假设现在是:2022 年 1 月 5 日 11 点 52 分,得到的结果是:27356392,也就是 18997 天余 11 小时 52 分。如果微软要考虑时区的话,结果就是 3 小时 52 分了,这就把事情搞复杂了。
相关阅读