簡體   English   中英

將 NTP 時間戳轉換為 Unix 時間

[英]Convert NTP timestamp to Unix time

我從 NTP 服務器獲取當前時間。 NTP 的參考紀元是 1900 年 1 月 1 日的 0:00:00.000,我用於 NTP 的庫返回自該參考紀元以來經過的秒數。 如您所見,它的工作方式與 Unix 時間類似,只是它使用不同的參考紀元。 因此,我的目標是將這個 NTP 時間戳轉換為 unix 時間戳,同時避免所有那些奇怪的事情,比如閏年、閏秒以及人類對他們的時間尺度所做的所有其他奇怪的事情。

天真的方法顯然是計算 NTP 參考紀元和 Unix 參考紀元之間發生的秒數,將其存儲為常數並從 NTP 時間戳中減去,但我覺得我太愚蠢了忘記上面提到的一些奇怪的東西。 因此,我的問題是 Python 是否有一些內置的 function 或者是否有一個庫可以做到這一點。

ntplib python 庫將 NTP 時間戳與 Unix 時間轉換為自 1970 年 1 月 1 日以來的秒數。

import ntplib
from datetime import datetime, timezone

dt = datetime.now(timezone.utc)
ts = dt.timestamp()
print("datetime:", dt)
print("timestamp:", ts)

# convert native timestamp to NTP time
ntptime = ntplib.system_to_ntp_time(ts)
print("NTP time: ", ntptime)

# convert NTP time to native timestamp
ts = ntplib.ntp_to_system_time(ntptime)
print("timestamp:", ts)

Output:

datetime: 2022-02-01 18:22:56.530085+00:00
timestamp: 1643739776.530085
NTP time:  3852728576.530085

該庫還實現了一個 NTP 客戶端來查詢 NTP 服務器並從請求及其響應中返回相關的時間。

import ntplib
from datetime import datetime

client = ntplib.NTPClient()
server = 'pool.ntp.org'

resp = client.request(server, version=3)

print("offset", resp.offset)
print("delay", resp.delay)

# timestamps are converted to native "UNIX" timestamps
print(resp.orig_time)

print("orig_time:", datetime.utcfromtimestamp(resp.orig_time))
print("recv_time:", datetime.utcfromtimestamp(resp.recv_time))
print("tx_time  :", datetime.utcfromtimestamp(resp.tx_time))
print("dest_time:", datetime.utcfromtimestamp(resp.dest_time))

Output:

offset 0.007886648178100586
delay 0.002925395965576172
1643738937.685132
orig_time: 2022-02-01 18:08:57.685132
recv_time: 2022-02-01 18:08:57.693858
tx_time  : 2022-02-01 18:08:57.693956
dest_time: 2022-02-01 18:08:57.688134

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM