C# 日期时间如何确定它是现在和今天的时间



在网上找不到任何东西,也找不到关于这个的文档。c#的DateTime.NowDateTime.Today从何而来?这些是局部化的值。是由Windows决定的吗?或者IIS有影响吗?我想知道到底是什么解析了c#的真实时间,以及什么会影响它。


为什么我想知道这个

我有一些奇怪的API行为,有些东西在他们应该返回的几个小时之前。这很可能与时区有关。VPS和客户端在同一个时区,所以我想知道什么会影响这种行为。

我正在做一个艰难的...FromDate.Date <= DateTime.Today.Date,出于某种原因,我有时会得到来自";明天。其中2021-02-21 <= 2021-02-20似乎是"正确的"。真正的意思是,DateTime.Today似乎是关闭的。只有在晚上10点之后,在实际午夜之前的几个小时才看到这种行为,这表明它与时区有关。

如果你对这种行为有任何意见,请告诉我

感谢@Matthew Watson帮助我走到这里。

未来的任何人

从系统接收DateTime.Now。首先,它将获得UtcNow,然后应用一个本地偏移量(如果有的话)。

见源代码第1051行

DateTime.Today属性只返回DateTime.Now.Date

参见源代码第1262行


UtcNow由内部外部方法GetSystemTimeWithLeapSecondsHandling接收。我找不到一个实现

见源代码

根据我的经验,DateTime.NowDateTime.Today检查服务器的时间。如果在服务器上运行应用程序,很可能是在检查服务器时间

从技术上讲,根据微软文档,DateTime。Now属性将存储在机器上的DateTime对象返回当前日期和时间,解释为本地时间。另一边是DateTime。是一个对象,设置为今天的日期,时间组件设置为00:00:00。Today属性适合在只处理日期的程序中使用,因为它返回当前日期而不返回当前时间。我相信影响它的是本地机器上的时间设置,我怀疑IIS是否会影响它。但是,如果您在服务器上运行应用程序,这些值可能会受到影响。

最新更新