利用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 相关文章推荐
zbar解码二维码和条形码示例
Feb 07 Python
Python、Javascript中的闭包比较
Feb 04 Python
python django使用haystack:全文检索的框架(实例讲解)
Sep 27 Python
Python二叉树的定义及常用遍历算法分析
Nov 24 Python
Python docx库用法示例分析
Feb 16 Python
Python爬虫学习之获取指定网页源码
Jul 30 Python
python打印n位数“水仙花数”(实例代码)
Dec 25 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
Feb 20 Python
python利用os模块编写文件复制功能——copy()函数用法
Jul 13 Python
2021年的Python 时间轴和即将推出的功能详解
Jul 27 Python
PyCharm+PyQt5+QtDesigner配置详解
Aug 12 Python
SpringBoot首页设置解析(推荐)
Feb 11 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序列号生成函数和字符串替换函数代码
2012/06/07 PHP
CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)
2016/09/01 PHP
PHP实现的统计数据功能详解
2016/12/06 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
理解Javascript_11_constructor实现原理
2010/10/18 Javascript
js三种排序算法分享
2012/08/16 Javascript
使用js获取地址栏中传递的值
2013/07/02 Javascript
jquery 页面滚动到底部自动加载插件集合
2014/01/31 Javascript
javascript中bind函数的作用实例介绍
2014/09/28 Javascript
JavaScript中的console.dir()函数介绍
2014/12/29 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
2015/03/11 Javascript
个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
2015/06/10 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
2016/09/04 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
JavaScript reduce和reduceRight详解
2016/10/24 Javascript
jQuery插件之validation插件
2017/03/29 jQuery
layui前段框架日期控件使用方法详解
2017/05/19 Javascript
js实现1,2,3,5数字按照概率生成
2017/09/12 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
ES6使用新特性Proxy实现的数据绑定功能实例
2020/05/11 Javascript
解决vue安装less报错Failed to compile with 1 errors的问题
2020/10/22 Javascript
python实现给数组按片赋值的方法
2015/07/28 Python
利用Python实现颜色色值转换的小工具
2016/10/27 Python
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
2017/07/07 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
2018/08/02 Python
Python之使用adb shell命令启动应用的方法详解
2019/01/07 Python
Django Admin 上传文件到七牛云的示例代码
2020/06/20 Python
CSS3图片旋转特效(360/60/-360度)
2013/10/10 HTML / CSS
Html5 语法与规则简要概述
2014/07/29 HTML / CSS
Public Desire美国/加拿大:全球性的在线鞋类品牌
2018/12/17 全球购物
英国景点门票网站:attractiontix
2019/08/27 全球购物
Athleta官网:购买女士瑜伽服、技术运动服和休闲运动服
2020/11/12 全球购物
幼教简历自我评价
2014/01/28 职场文书
材料员岗位职责范本
2015/04/11 职场文书
雷锋的故事观后感
2015/06/10 职场文书
CSS变量实现主题切换的方法
2021/06/23 HTML / CSS