用Python校準本地時間
目錄
- 1. 概念
- 1.1 基本概念
- 1.2 版本演進
- 2. 示例演示
- 2.1 前提條件
- 2.2 完整程式碼
- 2.3 其他問題
- 3. 參考資訊:
1. 概念
1.1 基本概念
時間,對於我們來說很重要,什麼時候做什麼?什麼時候發生什麼?沒有時間的概念,生活就亂了。
在日常的運維當中,我們更關注告警的時間:什麼時候發生、什麼事故、影響範圍、什麼時候解決,都是有關聯性的,所以時間的準確性是非常非常的重要。
你可能會好奇,時間到底是怎麼來的呢?作為網工的你,可能你也不是很清楚吧?
你是不是隻知道NTP?
標準參考時鐘是什麼?
時間戳'1573401600' , 能看出這個是什麼時間點?
原子鐘和GPS是作為標準參考時鐘,全世界都以它為時鐘源。
從你手錶或電腦的時間同步到時鐘源,中間可能經過多層級,每一層叫做 'stratum' ,只是精確度不一樣而已。當然,我們肯定不是直接和原子鐘同步,我們可以選擇最近的主時鐘源,比如中國/香港等等。
或者,你們公司內網可能是同步到內網的主時鐘伺服器,然後同步到網際網路去。
說完了時鐘源,那麼得有一個時間標準吧,全世界每個國家時區都不一樣,不能用一個時間給全地球用吧。
GMT(Greenwich Mean Time): 格林尼治標準時間,以太陽橫穿格林尼治子午線(本初子午線)來計算,現不推薦;
UTC( Universal Time Coordinated ):協調世界時間 , 以原子時秒長為基礎 ,接近GMT,作為世界標準時間。
為了統一世界的時間,1884年的國際經度會議規規定將全球劃分為24個時區(東、西各12個時區)。規定英國(格林尼治天文臺舊址)為零時區(GMT+00),東1-12區,西1-12區,中國北京處於東8區(GMT+08)
舉個栗子:
UTC 時間:2019-11-10 16:00:00 北京時間:2019-11-11 00:00:00 (UTC + 8個小時)
時鐘源和標準時間說完了,那麼接下來講下時間同步通訊機制。
網路時間協議NTP(Network Time Protocol)是TCP/IP協議族裡面的一個應用層協議。
NTP用於在一系列分散式時間伺服器與客戶端之間同步時鐘。
NTP的實現基於IP和UDP,NTP報文通過UDP傳輸,埠號是123。
1.2 版本演進
版本 | 時間 | 協議號 | 描述 |
---|---|---|---|
NTPv1 | 1988年6月 | RFC 1059 | 首次提出了完整的NTP規則以及演算法,但是NTPv1不支援認證和控制訊息 |
NTPv2 | 1989年9月 | RFC 1119 | 支援認證和控制訊息 |
NTPv3 | 1992年3月 | RFC 1305 | 正式引入了校正原則,並改進了時鐘選擇和時鐘過濾演算法。NTPv3目前應用較為廣泛,僅支援IPv4 |
NTPv4 | 2010年6月 | RFC 5905 | 支援IPv4和IPv6,安全性更高。 |
2. 示例演示
2.1 前提條件
準備好三方庫:ntplib
安裝方法:
pip3 install -i [https://pypi.douban.com/simple/](https://pypi.douban.com/simple/) ntplib
環境:Windows + Python3
2.2 完整程式碼
#!/usr/bin/env python3
#-*- coding:UTF-8 -*-
#歡迎關注微信公眾號:點滴技術
#這裡有靠譜、有價值、免費分享
import ntplib
import os,datetime
hosts = ['0.cn.pool.ntp.org','1.cn.pool.ntp.org','2.cn.pool.ntp.org','3.cn.pool.ntp.org']
def ntp_client():
#建立例項,NTPClient()是一個類
t = ntplib.NTPClient()
for host in hosts:
try:
#ntp server可以填寫主機和域名,建議用域名
#預設埠為ntp, 版本為2, 超時為5s
#作用:查詢 NTP 伺服器,並返回物件
r = t.request(host , port='ntp', version=4, timeout=5)
if r:
break
except Exception as e:
pass
#顯示的是時間戳
t = r.tx_time
#使用datetime模組,格式化:x年x月x日 時:分:秒.毫秒
_date,_time = str(datetime.datetime.fromtimestamp(t))[:22].split(' ')
print("調整前時間是:", datetime.datetime.now())
os.system('date {} && time {}'.format(_date, _time))
print("調整後時間是:", datetime.datetime.now())
if __name__ == '__main__':
#適用於Windows
ntp_client()
在windowns環境下,通過'管理員'執行'cmd',進入到對應的檔案路徑,執行結果如下所示:
備註:截至目前,尚未找到能夠在pycharm直接執行程式碼,報錯 “客戶端沒有所需的特權”,後續研究 'ctypes' 看能否實現。
2.3 其他問題
關於pycharm執行'os.system()' 出現中文亂碼問題,需要改下編碼問題,設定如下:
3. 參考資訊:
亞洲NTP伺服器池:
時間戳轉換
UTC
時區
如果喜歡的我的文章,歡迎關注我的公眾號:點滴技術,掃碼關注,不定期分享
相關推薦
用Python校準本地時間
目錄 1. 概念 1.1 基本概念 1.2 版本演進 2. 示例演示 2.1 前提條件 2.2 完整程式碼 2.3 其他問題
Python學習筆記(十五)用Python獲取本地數據
cname lin txt .py ora 系統 筆記 緩沖 log f1 = open(r‘E:\Python\Data\data1.txt‘) #讀取data1.txt文件,使用系統默認緩沖區大小, 為了讀取快點,使用緩存吧!
用Python print 動態時間
def t_clock(): import time while True: s = time.asctime() print(s[11:19],end="") time.sleep(1) print("\r",
用Python獲取本地主機名及IP地址的簡單方式
方法一: >>> import socket >>> # 獲取主機名 >>> hostname = socket.gethostname() >>> hostname 'USER-20150331GI' >>
如果用python利用本地sendmail服務傳送郵件
來自於http://stackoverflow.com/questions/73781/sending-mail-via-sendmail-from-python # Import smtplib for the actual sending function impor
在學習王樹義老師的《用Python做輿情時間序列視覺化》筆記
無意間發現王老師的部落格,覺得對於新手來說很不錯的教程,於是就自己動手開始實戰其中的《用Python做輿情時間序列視覺化》,但是其中或多或少的會遇到一些問題,現就實現過程中的問題作一個總結。 首先在安裝ggplot這個包的時候,死活安裝不上,而且速度很慢點我檢視解決方法,所
·Python 獲取本地時間戳(包含毫秒)
Python 獲取本地時間戳(包含毫秒)如何通過 Python 獲取一個完整的時間戳。import time def get_time_stamp(): ct = time.time()
【原創】用python將時間unix格式轉換總結
接受 bsp 時間戳 pretty 需要 字符串解析 time函數 spa datetime 我們可以用python裏面的time模塊mktime方法將轉為unix時間戳,mktime函數只能接受相應時間的元祖序列。在此之前需要先將輸入的時間轉為元組序列: 如果輸入的時間為
小竈時間-如果你還不會用Python虛擬環境
小竈時間 python環境 conda anaconda pip 一個鼓搗電腦多年的程序猿,帶給你的幾點編程套路和幾個靈巧工具,希望為你的編程之路添磚加瓦,加血回藍,一起拼荊斬棘,共同成長。統稱:小竈時間,作者:第8哥。 1. 為什麽用Python虛擬環境 實際工作中,我們接觸的 Pyt
用Anaconda安裝本地python包
安裝 mina 安裝步驟 http cond 天突 點擊 .whl 一鍵 Anaconda確實帶來了很多方便,但是之前也過多的依賴了conda自帶的一鍵下載python包的功能。這不,這幾天突然要用FastFM這個包,無奈conda裏沒有,於是只能從github下載下來,實
python utc時間、本地時間及時間戳轉化
datetime 同時 family date pan 宋體 datatime 類型 時間戳 python datatime模塊實現時間戳和本地時間、UTC時間之間的互相轉化 如何獲得unix timestamp dt=datetime.datetime.now()
python獲取當前時間用GUI介面顯示
程式執行效果圖: 有兩種方法,執行效果一樣 方法一:利用configure()或config()方法實現文字變化 # 方法一:利用configure()或config()方法實現文字變化 import tkinter import time def gettime():
用python爬蟲下載20張圖片到本地
資料全都是寫死的,有需要可以自行修改。 import requests from lxml import etree base_url = "https://unsplash.com/search/photos/flower" headers = {"User-Agent":
Python檢查和同步本地時間北京時間!
背景 有時本地伺服器的時間不準了,需要同步網際網路上的時間。 解決方案 NTP時間同步,找到一些可用的NTP伺服器進行同步即可。 通過獲取一些大型網站的時間來同步為自己的時間。 * 由於NTP時間同步,如果相差比如有好幾個小時,那麼時間不同步矯正回來其實是非常慢的;我
用Python處理非平穩時間序列(附程式碼)
原文地址:https://blog.csdn.net/tmb8z9vdm66wh68vx1/article/details/84207895 由於排版和圖片原因,請儘量轉制原文觀看,在此只是作為個人的一個記錄。 作者:AISHWARYA SINGH 翻譯:陳之炎 校對:丁楠雅 本
[Python--]用Python實現時間離散化
最近在分析日誌的時候遇到這樣一個需求。統計每小時的角色建立總數和每10分鐘的線上人數。需求具體實現不做討論, 這裡主要記錄如何將日誌時間離散到相應區間的問題。先解釋每小時的概念,按24小時算,一天可以分這麼幾個時間點:00:00:00,01:00:00,02:00:00,.
python獲取本地的時間戳
import time #輸出本地時間 print(time.strftime("%Y-%m-%d %X", time.localtime())) # 自定義時間 dt_data = "2016-
用python處理時間、utf8文字、正則匹配、序列化、目錄路徑搜尋、xml解析
python 處理時間 1 import time 2 import re 3 now = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()) 4 timeobj = re.match(r'(.*)-(.*)-(.*) (.*):(.*):(.*)',
用python為wallpaper engine批量新增本地視訊
wallpaper engine可以用本地視訊作為桌面背景,如果電腦裡有很多電影、電視劇、動畫之類的想隨機播放,一個一個新增還是很困難的,本文用python寫一個指令碼,修改wallpaper engine的配置檔案,把指定目錄下的視訊全部新增進來。算是學習py
Python 時間戳及本地時間處理
Python 時間獲取 要使用到python time模組 程式碼如下: import time print time.time() 結果: 1472483797.276373 結果為浮點型的 時間戳 指格林威治時間1970年01