如何在Python中获取准确的UTC时间?
我写了一个桌面应用程序,使用了 datetime.datetime.utcnow()
来获取时间戳。不过我最近发现,有些使用这个应用的人在同一时间运行程序时,得到的结果和我差别很大。有没有什么办法可以在本地获取UTC时间,而不需要用urllib从网站上获取呢?
2 个回答
7
其实,ntplib 这个库在计算时间偏差的时候,会考虑到往返延迟的问题。你可以通过 NTP 响应中的“offset”属性来获取这个偏差值。所以,得到的结果应该不会差得太离谱。
24
Python需要依赖操作系统来提供准确的时间。如果操作系统没有提供准确的时间,你就只能绕过它。这里有一个纯Python写的NTP客户端的实现,可以在这里找到。下面是一个非常简单的例子:
>>> import ntplib,datetime
>>> x = ntplib.NTPClient()
>>> datetime.datetime.utcfromtimestamp(x.request('europe.pool.ntp.org').tx_time)
datetime.datetime(2009, 10, 21, 7, 1, 54, 716657)
不过,频繁地去请求其他NTP服务器的时间并不是个好主意。一个好的网络公民会使用ntp客户端库来跟踪操作系统时钟和从服务器获取的时间之间的差异,然后定期去调整时间。