在网上找不到任何东西,也找不到关于这个的文档。c#的DateTime.Now
或DateTime.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.Now
或DateTime.Today
检查服务器的时间。如果在服务器上运行应用程序,很可能是在检查服务器时间
从技术上讲,根据微软文档,DateTime。Now属性将存储在机器上的DateTime对象返回当前日期和时间,解释为本地时间。另一边是DateTime。是一个对象,设置为今天的日期,时间组件设置为00:00:00。Today属性适合在只处理日期的程序中使用,因为它返回当前日期而不返回当前时间。我相信影响它的是本地机器上的时间设置,我怀疑IIS是否会影响它。但是,如果您在服务器上运行应用程序,这些值可能会受到影响。