Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python获得准确的UTC时间?_Python_Datetime_Timestamp_Utc - Fatal编程技术网

如何使用Python获得准确的UTC时间?

如何使用Python获得准确的UTC时间?,python,datetime,timestamp,utc,Python,Datetime,Timestamp,Utc,我编写了一个桌面应用程序,并使用datetime.datetime.utcnow()作为时间戳,但是我最近注意到,一些使用该应用程序的人得到的结果与我同时运行该程序时得到的结果大不相同。有没有办法在本地获取UTC时间而不使用urllib从网站获取它?Python依赖于底层操作系统来提供准确的时钟。如果它不这样做,那么除了绕过o/s之外,您别无选择。有一个NTP客户机的纯Python实现。一个非常简单的方法: >>> import ntplib,datetime >>

我编写了一个桌面应用程序,并使用
datetime.datetime.utcnow()
作为时间戳,但是我最近注意到,一些使用该应用程序的人得到的结果与我同时运行该程序时得到的结果大不相同。有没有办法在本地获取UTC时间而不使用urllib从网站获取它?

Python依赖于底层操作系统来提供准确的时钟。如果它不这样做,那么除了绕过o/s之外,您别无选择。有一个NTP客户机的纯Python实现。一个非常简单的方法:

>>> 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客户端库来跟踪o/s系统时钟和从服务器获取的时钟之间的偏移量,并且只定期轮询以调整时间。

实际上,ntplib计算该偏移量,并考虑往返延迟。
它可以通过NTP响应的“偏移量”属性获得。因此,结果应该不会太大。

使用monkeypatching,您可以记录偏移量,并更改datetime库方法,以便在应用程序的某个部分请求时间时应用偏移量。如果时间和日期时间库能够自动处理这种偏移,那就太好了。你可以告诉它你想要真实世界的时间,它会击中一个NTP服务器,记录偏移量,并在每次使用该时间时应用它。这并不能解释发出请求的“往返时间”。您要做的是使用
time.clock()
来测量
NTPClient()
响应所需的时间,将其拆分为两半,并将其添加到给定的时间中。这是正确的。这是一个有用的评论,但不是答案。你应该把它移到上面的评论中。我认为它提供了一种答案,对OP的观察(截然不同的结果)可能是错误的。还有,如果没有原子钟,人们怎么能在本地获得UTC时间呢?@Triarion:我看不出有什么不寻常的事情,不同的计算机返回不同的时间。即使你不需要一个本地的原子钟,为了获得UTC时间(如果你想要几十纳秒的精度,那就不能实时知道),你可以使用GPS(例如,通过相同的ntp软件)。对于比例: