热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

1.概念1.1基本概念时间,对于我们来说很重要,什么时候做什么?什么时候发生什么?没有时间的概念,生活就乱了。在日常的运维当中,我们更

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

时区

总结

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


推荐阅读
  • 这是一份详细 & 清晰的计算机网络基础 学习指南
    前言计算机网络基础该是程序猿需掌握的知识,但往往会被忽略今天,我将献上一份详细&清晰的计算机网络基础学习指南,涵盖TCPUDP协议、Http协议、Socket等,希望你们会喜欢。目 ... [详细]
  • LVS–基础–02–常用命令1、帮助命令ipvsadm--help2、添加虚拟服务器2.1、语法ipvsadm-A[-t|u|f][vip_addr:port][-s:指定算 ... [详细]
  • UDP协议开发
    UDP是用户数据报协议(UserDatagramProtocol,UDP)的简称,其主要作用是将网络数据流量压缩成数据报形式,提供面向事务的简单信息传送服务。与TCP协议不同,UD ... [详细]
  • 利用ipv6技术,废旧笔记本变成server
    如果你家的路由器已经get到了ipv6地址,并且你家的电脑也获取了有效的ipv6地址,在广域网的设备可以访问到。那恭喜你,再配合我这个dd ... [详细]
  • 一、域名解析记录说明记录类型A:用来指定域名的IPv4地址(如:8.8.8.8),如果需要将域名指向一个IP ... [详细]
  • Redis 外部访问设置
    1、错误原因Redis搭建好后一般都是使用编程语言进行连接调用,默认Redis的设置是不允许外界访问的,连接Redis只能通过本地(127.0.0.1)来连接,而不能使用网络IP( ... [详细]
  • 13Linux基本命令和配置服务器来电后自动开机
    本节所讲内容:Linux终端介绍Shell提示符BashShell基本语法基本命令的使用:ls、pwd、cd查看系统和BIOS硬件时间Linux如何获得 ... [详细]
  • 缓冲区溢出实例(一)–Windows
    一、基本概念缓冲区溢出:当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被填满从而覆盖了相邻内存区域的数据。可以修改内存数据,造成进程劫持,执行恶意代码,获 ... [详细]
  • python有什么应用领域[python常见问题]
    python语言可以用来开发游戏,用于大数据的挖掘和处理,开发web,应用在系统运维,云计算,金融理财分析,人工智能等涉及 ... [详细]
  • 为什么80%的码农都做不了架构师?#0系列目录#聊聊远程通信Java远程通讯技术及原理分析聊聊Socket、TCPIP、HTTP、FTP及网 ... [详细]
  • 服务器性能优化之网络性能优化
    hi,大家好,今天分享一篇后台服务器性能优 ... [详细]
  • centos samba 看不到共享目录_samba共享服务
    会不会有那么一天,生活可以简单到每天清早踏上一辆载着鲜花的脚踏车,微笑着穿过窄窄的街巷,为爱花的人送去芬芳,为需要知识的你送 ... [详细]
  • Linux数据链路层的包解析仅以此文作为学习笔记,初学者,如有错误欢迎批评指正,但求轻喷。一般而言,Linux系统截获数据包后,会通过协议栈,按照TCPIP层次进行解析,那我们如何 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了如何使用iptables添加非对称的NAT规则段,以实现内网穿透和端口转发的功能。通过查阅相关文章,得出了解决方案,即当匹配的端口在映射端口的区间内时,可以成功进行端口转发。详细的操作步骤和命令示例也在文章中给出。 ... [详细]
author-avatar
欢乐的小码农
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有