用Python校准本地时间
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. 参考信息:
如果喜欢的我的文章,欢迎关注我的公众号:点滴技术,扫码关注,不定期分享
用Python校准本地时间的更多相关文章
- python获取本地时间
python本地时间 import time # 格式化成2016-03-20 11:45:39形式 now = time.strftime("%Y-%m-%d %H:%M:%S" ...
- python获取本地时间,时间戳与日期格式相互转换
附上代码与运行结果截图: import time # 获取当前时间 now = time.localtime() # 格式化日期 now_ = time.strftime('%Y-%m-%d %H:% ...
- python获取网络时间和本地时间
今天我们来看一下如何用python获取网络时间和本地时间,直接上代码吧,代码中都有注释. python获取网络时间 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- Python: 处理mongodb文档,怎么让UTC时间转换为本地时间?
存储数据到MongoDB数据库时,一般我们会加一个更新数据的时间update_time.这时在python代码中 会用到datetime模块以便获取当前系统时间,但是存入到MongoDB数据库时,存储 ...
- Python中如何把一个UTC时间转换为本地时间
需求: 将20141126010101格式UTC时间转换为本地时间. 在网上搜了好长时间都没有找到完美的解决方案.有的引用了第三方库,这就需要在现网安装第三方的软件.这个是万万不可的.因为真实环境不一 ...
- linux时间校准设置,解决与本地时间不一致问题
时间安装脚本 从NTP上把时间同步到本地 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 更新本地时间 ntpdate us.pool.nt ...
- Python 创建本地服务器环境生成二维码
一. 需求 公司要做一个H5手机端适配页面,因技术问题所以H5是外包的,每次前端给我们源码,我们把源码传到服务器让其他人访问看是否存在bug,这个不是很麻烦吗?有人说,可以让前端在他们的服务器上先托管 ...
- 【转】Python 日期和时间
本文转自:http://www.runoob.com/python/python-date-time.html Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能. Pytho ...
- python中的时间处理函数
Python提供了多个内置模块用于操作日期时间,像calendar,time,datetime.time模块我在之前的文章已经有所介绍,它提供 的接口与C标准库time.h基本一致.相比于time模块 ...
随机推荐
- 为什么一个标准的反相器中 P 管的宽长比要比 N 管的大呢?
和载流子有关.P 管是空穴导电,而 N 管是电子导电,电子的迁移率大于空穴.所以在同样的电场下,N 管的电流要大于 P 管,因此要增大 P 管的宽长比,使之对称,这样才能使得两者上升下降时间相等.高低 ...
- 公开的免费WebService接口分享,用于做接口练习
本文转载于 https://cloud.tencent.com/developer/article/1349603 天气预报Web服务,数据来源于中国气象局 Endpoint http://www.w ...
- MyEclipse 中无法直接使用BaseEncoder问题
首先 :点击项目---->build path--->configure Build Path 然后:java build path --->libraries--->JRE ...
- alpha测试和beta测试的区别
alpha测试版,有点相当于内部测试,一般开发人员在场 ,是由用户做测试,但开发人员在场,一般是请用户到开发现场去测试 beta测试版,完全交给用户,由用户做测试,返回测试报告,相当于发行前的一 ...
- Storm入门,看这篇就够了
部分一:Srorm 简介 1.1 Storm是实时的数据流,Hadoop是批量离线数据 起源背景 Twitter 开源的一个类似于Hadoop的实时数据处理框架 Storm是由Nathan Marz ...
- gym102201E_Eat Economically
题意 给\(2n\)个物品,分别有\(a,b\)属性,对于\(i=1...n\),选择\(i\)个\(a\)属性和\(i\)个\(b\)属性,且每个物品只能作为一种属性的贡献,求最小的值. 分析 看了 ...
- jenkins导致磁盘占满问题
背景 今天登陆jenkins提示磁盘空间不足,且构建发生错误 排查问题 cd到jenkins 安装目录 执行df -h 发现root目录沾满 执行 du -ah --max-depth=1 发现是.j ...
- 阿里云服务器CentOS6.9安装Ant
下载地址:http://mirrors.hust.edu.cn/apache/ant/binaries/ 1.下载 2.上传到服务器(非root用户下) 3.解压移动目录(root用户下) tar - ...
- springboot 启动报错Consider defining a bean of type 'com.example.springbootdruid.mapper.UserMapper' in your configurati
一.问题 springboot项目启动时报错: Field userMapper in com.example.springbootdruid.service.impl.UserServiceImpl ...
- js赋值,字典,数据类型和参数传递的简单熟悉
之所以这样分,原因是布尔类型和整数浮点数在内存里是直接赋值的,而数组实际上数组名指的是这个数组的地址 字符串同样是地址,字典也是. //熟悉赋值 var x=0; console.log(x); va ...