在 python 中,通过导入datetime 模块并使用它的各种函数,class datetime.datetime
我们可以得到基本的日期格式,甚至是用于部署的日期算法。
例如,datetime.datetime.now()将返回今天的日期。
但是,今天当我运行这个程序时,我的电脑没有互联网连接,但它仍然输出今天的日期。
那么,如何datetime.datetime.now()
返回正确的日期呢?算法会在 24 小时后自动递增吗?
在 python 中,通过导入datetime 模块并使用它的各种函数,class datetime.datetime
我们可以得到基本的日期格式,甚至是用于部署的日期算法。
例如,datetime.datetime.now()将返回今天的日期。
但是,今天当我运行这个程序时,我的电脑没有互联网连接,但它仍然输出今天的日期。
那么,如何datetime.datetime.now()
返回正确的日期呢?算法会在 24 小时后自动递增吗?
tl;drdatetime.datetime.now()
使用计算机内置的时钟。
计算机能够保持相当准确的时间比互联网存在的时间要长得多。
例如,PC 具有所谓的实时时钟(RTC)。它由电池供电,即使在计算机关闭时也能保持时间。
有趣的是,一些分布式算法需要非常精确的时钟才能可靠运行。所需的精度远远超过简单的基于振荡器的时钟所能提供的任何精度。
结果,像谷歌这样的公司在他们的数据中心运行GPS和原子钟(即使是那些也不是没有潜在问题,例如,在 2017 年 1 月 26 日,一些 GPS 时钟在 10 小时内出现了 13 微秒)。
即使数据中心连接到互联网,GPS 和原子钟都不需要互联网连接来运行。此外,有人需要保持所有互联网时间基础设施的运行......不可能每个人都“离开互联网”。;)
既然我们正在讨论跨计算机网络分配时间的主题,那么执行此操作的主要协议是NTP(网络时间协议)和 PTP(精确时间协议)。
的文档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 将打印您更改的时间。