【问题标题】:How does C# DateTime determine it's Now and Today timesC# DateTime 如何确定现在和今天的时间
【发布时间】:2021-02-19 10:35:57
【问题描述】:

在互联网上找不到任何东西,也找不到有关此的文档。 C# 从哪里得到DateTime.NowDateTime.Today?这些是本地化的值。它是由Windows决定的吗?或者 IIS 会影响这个吗?我想知道究竟是什么将实际时间解析为 C# 以及什么会影响它。


为什么我想知道这个

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

我正在努力 ...FromDate.Date <= DateTime.Today.Date 并且出于某种原因,我有时会得到明天“来自”的记录。 2021-02-21 <= 2021-02-20 似乎是“真实的”。真正的意思是DateTime.Today 似乎已关闭。仅在晚上 10 点之后才看到这种行为,在实际午夜前几个小时,这表明它与时区有关。

如果您对此行为有任何想法,请告诉我

【问题讨论】:

  • 它通过Windows API调用使用PC上的RTC(可能通过调用GetSystemTime()
  • @MatthewWatson 这是否意味着 C# 本地现在时间应该始终与您在右下角看到的 Windows 时间相同。开箱即用的设置不会改变任何东西
  • 调用宿主机相关操作系统API。
  • 是的,Console.WriteLine(DateTime.Now) 应该是一样的。
  • DateTime.Kind is ignored on comparisons,所以它似乎问题在于您的FromDate,而不是DateTime.Today。我可以建议记录这两个值以找出原因吗?

标签: c# datetime


【解决方案1】:

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

对于未来的任何人

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

source code line 1051

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

source code line 1262


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

source code

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 谢谢。有官方文档的链接吗?
    • 它不访问服务器时间,它访问本地PC时间。 Windows 本身有时可能会将本地 PC 时间设置为服务器时间(例如,如果它在域上),或者它可能会将其设置为来自时间服务器的时间,但 DateTime.Now 不会转到服务器。跨度>
    • 我的错误@RoyBerris docs.microsoft.com/en-us/dotnet/api/… 根据this的文档,据说它是从计算机中获取的。如果您仍然遇到问题,关于 DateTime 问题,我建议您查看docs.microsoft.com/en-us/dotnet/api/…
    【解决方案3】:

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

    【讨论】:

    • 我们可以得出结论DateTime.Today = DateTime.Now.Date吗?还是有区别?
    • @RoyBerris DateTime.Today的实际实现很简单DateTime.Now.Date
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多