Ntp服务的使用

Ntp服务的使用

十一月 29, 2023

什么是NTP服务

使用之前我们先了解一下。

NTP服务器【[Network Time Protocol](https://baike.baidu.com/item/Network Time Protocol/2985649?fromModule=lemma_inlink)(NTP)】是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟GPS等等),做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。时间按NTP服务器的等级传播。按照离外部UTC源的远近把所有服务器归入不同的Stratum(层)中。

​ ——百度百科

上文说的很复杂,但简单来说就是获取时间的一种方式。

在需要时间数据时,我们有系统时间和外部时间两种方式来获取。但是呢,使用时可能遇到一些情况。例如系统时间设置的不正确,从而会导致出现误差。虽然说一般系统时间也是根据NTP服务器来获取的,但我们无法保证系统的NTP服务器是否正常工作,所以我们可以考虑直接使用NTP服务器来获取正确的时间。

这也是我自己的想法,国家授时中心,以及腾讯云、阿里云,这类一线大厂,它们提供的NTP服务具有稳定性。经过本人验证,企业的NTP服务是比授时中心快一些的。话不多说,直接上手吧。

使用NTP

以下的代码就是我本人使用NTP服务器的例子,根据我的需求我只需要年月日这个时间。

图片(暂时没有稳定图床)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
def NtpTime():
""" 通过Ntp服务器返回时间 """
MD = True
num = 1
ntpurl = f'ntp{num}'
while MD:
try:
ntp_server = f"{ntpurl}.aliyun.com"
# 创建NTP客户端
client = ntplib.NTPClient()

# 发送NTP请求并获取时间信息
response = client.request(ntp_server)
MD = False
timestamp = response.tx_time

# 将时间戳转换为日期时间格式

local_time = time.localtime(timestamp)
formatted_time = time.strftime("%Y,%m,%d", local_time)
Year, Mouth, Day = formatted_time.split(',')

Year, Mouth, Day = map(int, [Year, Mouth, Day])
# 定义两个日期

date1 = datetime.date(Year, Mouth, Day)
return str(date1)
except ntplib.NTPException:
num += 1

使用NTP的缺点

毕竟我们通过访问NTP得到时间这一过程也需要耗时的,所以我们无法得到一个更精准的时间。

除非我们能估算代码的运行速度,提前加上,才能确保时间足够精准。