datetime.datetime.now()如何在没有互联网连接的情况下工作?

3
在Python中,通过导入 datetime模块并使用datetime.datetime类的各种函数,我们可以获取带有格式的基本日期甚至是日期算术以供部署。
例如,datetime.datetime.now()将返回今天的日期。

enter image description here

但是,今天在我的计算机上没有网络连接,但它仍然输出了今天的日期。

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


1
为什么代码会向其他机器请求日期和时间,而你的计算机已经知道呢? - Sami Kuhmonen
计算机没有网络连接,它还能正常运行吗? - S.Rakin
5
因为它里面有一个时钟? - Sami Kuhmonen
1
@W.Jack 想想你的BIOS - 它可以在不依赖网络的情况下维护时间。所有计算机都有一块电池,帮助保持RTC的功能,以及一些小的内存优势。 - DNorthrup
@W.Jack 它利用了系统时间,也就是你的系统时钟。尝试更改你的电脑时钟并再次运行它,看看会发生什么变化。 - Izzat Z.
2个回答

12

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

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

例如,个人电脑配备了所谓的实时时钟(RTC)。它是由电池供电的,即使计算机关闭也可以保持时间。

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

因此,像 Google 这样的公司在其数据中心中使用GPS原子钟(即使这些钟表也不是没有潜在问题,例如在2017年1月26日,某些 GPS 时钟在十小时内误差达到了13微秒)。

即使数据中心连接到互联网,GPS 和原子钟也不需要互联网连接即可运行。此外,有人需要维护所有的互联网时间基础设施... 毕竟不能让每个人都从互联网上获取时间。 ;)

现在我们谈到了将时间分配到计算机网络上,主要的协议是NTP(网络时间协议)和PTP(精密时间协议)


值得一提的是NTP服务,它可以将本地时钟与远程时间服务器同步。 - SirWojtek
感谢您提供这些信息。我活了几十年,却从未想过这个问题。 - unobatbayar

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

1
这不是“本地时间”的意思。它的意思是“在计算机的时区内”,而不是“不查阅外部来源”。http://www.dictionary.com/browse/local-time - NPE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接