计算机如何知道当前的日期和时间?

时间:2016-06-05 00:23:47

标签: windows datetime winapi operating-system posix

请原谅我对此的无知。很久以前,很久以前我可能已经在Charles Petzold的 Programming Windows,4th Ed。一书中读过这本书了,我一定忘记了这一切。我记得第一章有关于CPU的定时器分辨率和时钟速度的说法,但我忘记了细节。我想他会回答这个问题。但我可以想象一下。已经很久了。

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

让某人为这个问题提供系统的答案会很高兴。

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

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

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

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

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

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

  3. 当然,(1)的答案也会回答(2)。

1 个答案:

答案 0 :(得分:-1)

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

System Time

  

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

     

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

     

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

     

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

     

GetSystemTimeAdjustmentSetSystemTimeAdjustment函数使用在每个时钟中断时应用的周期时间调整,将时钟与其他时间源同步。

     

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