.NET new DateTime 是哪个时区?

作者:vkvi 来源:ITPOW(原创) 日期:2022-1-5

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 分了,这就把事情搞复杂了。

相关阅读

相关文章