2

在 python 中,通过导入datetime 模块并使用它的各种函数,class datetime.datetime我们可以得到基本的日期格式,甚至是用于部署的日期算法。

例如,datetime.datetime.now()将返回今天的日期。

在此处输入图像描述

但是,今天当我运行这个程序时,我的电脑没有互联网连接,但它仍然输出今天的日期。

那么,如何datetime.datetime.now()返回正确的日期呢?算法会在 24 小时后自动递增吗?

4

2 回答 2

10

tl;drdatetime.datetime.now()使用计算机内置的时钟。

计算机能够保持相当准确的时间比互联网存在的时间要长得多。

例如,PC 具有所谓的实时时钟(RTC)。它由电池供电,即使在计算机关闭时也能保持时间。

有趣的是,一些分布式算法需要非常精确的时钟才能可靠运行。所需的精度远远超过简单的基于振荡器的时钟所能提供的任何精度。

结果,像谷歌这样的公司在他们的数据中心运行GPS原子钟(即使是那些也不是没有潜在问题,例如,在 2017 年 1 月 26 日,一些 GPS 时钟在 10 小时内出现了 13 微秒)。

即使数据中心连接到互联网,GPS 和原子钟都不需要互联网连接来运行。此外,有人需要保持所有互联网时间基础设施的运行......不可能每个人都“离开互联网”。;)

既然我们正在讨论跨计算机网络分配时间的主题,那么执行此操作的主要协议是NTP(网络时间协议)和 PTP(精确时间协议)

于 2017-08-23T06:20:46.957 回答
1

的文档datetime.datetime.now()没有说明从互联网收到的时间。

返回当前的本地日期和时间。如果可选参数 tz 为 None 或未指定,则类似于 today(),但如果可能,提供比通过 time.time() 时间戳获得的精度更高的精度(例如,这可能在提供C gettimeofday() 函数)。

如果 tz 不是 None,它必须是 tzinfo 子类的实例,并且当前日期和时间被转换为 tz 的时区。在这种情况下,结果等效于 tz.fromutc(datetime.utcnow().replace(tzinfo=tz))。另请参见 today()、utcnow()。

是从计算机时间接收的datetime,例如,如果您正在运行 Windows,请尝试从窗口更改时间,python 将打印您更改的时间。

检查其文档:https ://docs.python.org/2/library/datetime.html

于 2017-08-23T06:34:03.310 回答