利用Python校准本地时间的方法教程


Posted in Python onOctober 31, 2019

1. 概念

1.1 基本概念

时间,对于我们来说很重要,什么时候做什么?什么时候发生什么?没有时间的概念,生活就乱了。

在日常的运维当中,我们更关注告警的时间:什么时候发生、什么事故、影响范围、什么时候解决,都是有关联性的,所以时间的准确性是非常非常的重要。

你可能会好奇,时间到底是怎么来的呢?作为网工的你,可能你也不是很清楚吧?

利用Python校准本地时间的方法教程

  • 你是不是只知道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)

利用Python校准本地时间的方法教程

举个栗子:

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',进入到对应的文件路径,运行结果如下所示:

利用Python校准本地时间的方法教程

备注:截至目前,尚未找到能够在pycharm直接运行代码,报错 “客户端没有所需的特权”,后续研究 'ctypes' 看能否实现。

2.3 其他问题

关于pycharm运行'os.system()' 出现中文乱码问题,需要改下编码问题,设置如下:

利用Python校准本地时间的方法教程

3. 参考信息:

亚洲NTP服务器池:

时间戳转换

UTC

时区

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python遍历一个目录,输出所有的文件名的实例
Apr 23 Python
python 字典修改键(key)的几种方法
Aug 10 Python
python实现简单名片管理系统
Nov 30 Python
在Python 中实现图片加框和加字的方法
Jan 26 Python
Python实现删除排序数组中重复项的两种方法示例
Jan 31 Python
基于Django实现日志记录报错信息
Dec 17 Python
Pandas时间序列:时期(period)及其算术运算详解
Feb 25 Python
Keras设置以及获取权重的实现
Jun 19 Python
Django Auth用户认证组件实现代码
Oct 13 Python
python hmac模块验证客户端的合法性
Nov 07 Python
Python关于拓扑排序知识点讲解
Jan 04 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
Feb 03 Python
python实现计算器功能
Oct 31 #Python
python中的Elasticsearch操作汇总
Oct 30 #Python
django实现用户注册实例讲解
Oct 30 #Python
详解Django CAS 解决方案
Oct 30 #Python
详解使用django-mama-cas快速搭建CAS服务的实现
Oct 30 #Python
Django实现CAS+OAuth2的方法示例
Oct 30 #Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
Oct 30 #Python
You might like
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
2014/06/25 PHP
10个对初学者非常有用的PHP技巧
2016/04/06 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
2016/10/10 PHP
Zend Framework动作控制器用法示例
2016/12/09 PHP
Yii2框架中使用PHPExcel导出Excel文件的示例
2017/08/09 PHP
JavaScript基本概念初级讲解论坛贴的学习记录
2009/02/22 Javascript
jQuery EasyUI API 中文文档 - Documentation 文档
2011/09/29 Javascript
Notify - 基于jquery的消息通知插件
2011/10/18 Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
2011/10/22 Javascript
js自动生成对象的属性示例代码
2013/10/28 Javascript
超赞的jQuery图片滑块动画特效代码汇总
2016/01/25 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
2020/05/16 Javascript
浅谈Javascript中的12种DOM节点类型
2016/08/19 Javascript
JavaScript简单下拉菜单特效
2016/09/13 Javascript
用jquery获取自定义的标签属性的值简单实例
2016/09/17 Javascript
D3.js中强制异步文件读取同步的几种方法
2017/02/06 Javascript
jQuery在header中设置请求信息的方法
2017/03/06 Javascript
基于Two.js实现星球环绕动画效果的示例
2017/11/06 Javascript
[03:38]2014DOTA2西雅图国际邀请赛 VG战队巡礼
2014/07/07 DOTA
python通过正则查找微博@(at)用户的方法
2015/03/13 Python
Python的多维空数组赋值方法
2018/04/13 Python
《与孩子一起学编程》python自测题
2018/05/27 Python
NLTK 3.2.4 环境搭建教程
2018/09/19 Python
python使用循环打印所有三位数水仙花数的实例
2018/11/13 Python
python读csv文件时指定行为表头或无表头的方法
2019/06/26 Python
Python检查 云备份进程是否正常运行代码实例
2019/08/22 Python
python numpy 反转 reverse示例
2019/12/04 Python
python中常用的数据结构介绍
2021/01/12 Python
利用CSS3的checked伪类实现OL的隐藏显示的方法
2010/12/18 HTML / CSS
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
银行存款证明样本
2014/01/17 职场文书
写给女朋友的检讨书
2014/01/28 职场文书
安全标语大全
2014/06/10 职场文书
2014年财务部工作总结
2014/11/11 职场文书
5道关于python基础 while循环练习题
2021/11/27 Python
mysql的Buffer Pool存储及原理
2022/04/02 MySQL