【问题标题】:How does the computer know the present date and time?计算机如何知道当前的日期和时间?
【发布时间】:2016-10-04 19:31:12
【问题描述】:

请原谅我对此一无所知。我可能在很久以前,很多年前在 Charles Petzold 的Programming Windows,第 4 版一书中读到了这篇文章,而我一定已经忘记了这一切。我记得第一章有一些关于定时器分辨率和 CPU 时钟速度的内容,但我忘记了细节。我认为他回答了这个问题。但我可能是在想象事情。好久不见了。

虽然有related question here,但答案并不令我满意,因为它没有回答我感兴趣的更细微的细微差别,如下所述。

如果有人对这个问题提供一个系统的答案,那就太好了。

  1. 是否有某种内置在硬件中的时钟告诉它世界时?然后它通过添加时区偏移量来计算用户选择的语言环境中的本地时间?

    这个时钟存储时间信息的单位是什么?这如何转化为我们人类对日期和时间的概念?谁来做这个翻译——硬件还是 CPU?

    我假设在所有操作系统中都有一种与操作系统无关的方法来获取 UTC 时间。

    在 Windows 下,我记得曾经有一个 Win32 函数,您可以调用它,将指向 struct 的指针传递给它,它将填充该指针。该函数如何知道 UTC 时间是多少?

    就此而言,任何操作系统是如何知道的?

  2. 最后,计算是 CPU 绑定的还是设备/硬件/IO 绑定的?

当然,(1)的答案也将回答(2)。

【问题讨论】:

标签: windows datetime winapi operating-system posix


【解决方案1】:

以下 MSDN 文档对此进行了介绍:

System Time

系统时间是当前日期和时间。系统会保持时间,以便您的应用程序可以随时访问准确的时间。系统将系统时间基于协调世界时 (UTC)。基于 UTC 的时间被大致定义为英格兰格林威治的当前日期和时间。

系统首次启动时,将系统时间设置为基于计算机实时时钟的值,然后定期更新时间。要检索系统时间,请使用GetSystemTime 函数。 GetSystemTime 将时间复制到SYSTEMTIME 结构中,该结构包含月、日、年、工作日、小时、分钟、秒和毫秒的各个成员。向用户显示这种格式很容易。

您还可以使用GetSystemTimeAsFileTime 函数以文件时间格式获取系统时间。 GetSystemTimeAsFileTime 将时间复制到FILETIME 结构中。

要设置系统时间,请使用SetSystemTime 函数。 SetSystemTime 假定您已指定基于 UTC 的时间。

GetSystemTimeAdjustmentSetSystemTimeAdjustment 函数使用在每个时钟中断处应用的周期性时间调整来将时钟与另一个时间源同步。

请注意,系统可以通过与时间源同步来定期刷新时间。因为系统时间可以向前或向后调整,所以不要比较系统时间读数来确定经过的时间。相反,请使用Windows Time 中描述的方法之一。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 2017-10-17
    相关资源
    最近更新 更多