Python检查和同步本地时间(北京时间)的实现方法


Posted in Python onDecember 03, 2018

背景

有时本地服务器的时间不准了,需要同步互联网上的时间。

解决方案

  1. NTP时间同步,找到一些可用的NTP服务器进行同步即可。
  2. 通过获取一些大型网站的时间来同步为自己的时间。

* 由于NTP时间同步,如果相差比如有好几个小时,那么时间不同步矫正回来其实是非常慢的;我本次主要就是讲第2种方案,通过Python来实现的,可以直接设置为互联网上的时间。

要点描述

  • 假设:百度、淘宝等非常大型的网站的时间是正确的
  • 访问百度、淘宝等网站,它返回的HTTP Header中包含一个时间戳(一般是GMT时间)。
  • 根据这个时间戳,可以解析为当前的北京时间
  • 可以检查本地服务器时间与互联网时间是否一致
  • 可以使用date -s命令设置本地系统时间
  • 还可以使用hwclock -w将系统时间同步回硬件中保存

代码实现

代码见:https://github.com/smilejay/python/blob/master/py2018/set_check_localtime.py

代码在CentOS 7.4系统上Python 2.7上正常运行

为了考虑到兼容性和运行的方便性,代码中发送HTTP请求没有使用最流行的requests库而是使用了urllib2这个Python标准库。

# -*- coding: utf-8
 
import sys
import time
import subprocess
import argparse
import urllib2
 
 
def set_beijing_time_from_web(url):
 ''' set os and hardware clock as beijing time from internet '''
 # use urllib2 in python2; not use requests which need installation
 response = urllib2.urlopen(url)
 #print response.read()
 # 获取http头date部分
 ts = response.headers['date']
 # 将日期时间字符转化为time
 gmt_time = time.strptime(ts[5:25], "%d %b %Y %H:%M:%S")
 # 将GMT时间转换成北京时间
 local_time = time.localtime(time.mktime(gmt_time) + 8*3600)
 str1 = "%u-%02u-%02u" % (local_time.tm_year,
        local_time.tm_mon, local_time.tm_mday)
 str2 = "%02u:%02u:%02u" % (
  local_time.tm_hour, local_time.tm_min, local_time.tm_sec)
 cmd = 'date -s "%s %s"' % (str1, str2)
 #print cmd
 subprocess.check_call(cmd, shell=True)
 hw_cmd = 'hwclock -w'
 #print hw_cmd
 subprocess.check_call(hw_cmd, shell=True)
 print 'OK. set time: %s' % ' '.join([str1, str2])
 
 
def check_localtime_with_internet(url):
 ''' check local time with internet '''
 threshold = 2
 # use urllib2 in python2; not use requests which need installation
 response = urllib2.urlopen(url)
 #print response.read()
 # 获取http头date部分
 ts = response.headers['date']
 # 将日期时间字符转化为time
 gmt_time = time.strptime(ts[5:25], "%d %b %Y %H:%M:%S")
 # 将GMT时间转换成北京时间
 internet_ts = time.mktime(gmt_time)
 local_ts = time.mktime(time.gmtime())
 if abs(local_ts - internet_ts) <= threshold:
  print 'OK. check localtime.'
 else:
  print 'ERROR! local_ts: %s internet_ts:%s' % (local_ts, internet_ts)
  sys.exit(1)
 
 
if __name__ == '__main__':
 url = 'http://www.baidu.com'
 parser = argparse.ArgumentParser()
 parser.description = 'set/check localtime (i.e. CST) with internet'
 parser.add_argument('-c', '--check', action='store_true',
      help='only check local time')
 parser.add_argument('-s', '--set', action='store_true',
      help='only set local time')
 parser.add_argument('-u', '--url', default=url,
      help='the url to sync time')
 args = parser.parse_args()
 if args.set:
  set_beijing_time_from_web(args.url)
 else:
  check_localtime_with_internet(args.url)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python根据出生年份简单计算生肖的方法
Mar 27 Python
python3写爬取B站视频弹幕功能
Dec 22 Python
python3.5 tkinter实现页面跳转
Jan 30 Python
PyQt5实现拖放功能
Apr 25 Python
在NumPy中创建空数组/矩阵的方法
Jun 15 Python
python如何进行矩阵运算
Jun 05 Python
Python读写压缩文件的方法
Jul 30 Python
Python通用唯一标识符uuid模块使用案例
Sep 10 Python
如何利用Python写个坦克大战
Nov 18 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
Feb 04 Python
Django migrate报错的解决方案
May 20 Python
Python中三种花式打印的示例详解
Mar 19 Python
python 实现语音聊天机器人的示例代码
Dec 02 #Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
Dec 02 #Python
在pycharm上mongodb配置及可视化设置方法
Nov 30 #Python
PyCharm配置mongo插件的方法
Nov 30 #Python
对python自动生成接口测试的示例讲解
Nov 30 #Python
在unittest中使用 logging 模块记录测试数据的方法
Nov 30 #Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
Nov 30 #Python
You might like
PHP实现域名whois查询的代码(数据源万网、新网)
2010/02/22 PHP
探讨如何使用SimpleXML函数来加载和解析XML文档
2013/06/07 PHP
php使用wordwrap格式化文本段落的方法
2015/03/17 PHP
Mootools 1.2教程 设置和获取样式表属性
2009/09/15 Javascript
jquery ui resizable bug解决方法
2010/10/26 Javascript
firefox浏览器不支持innerText的解决方法
2013/08/07 Javascript
jQuery控制cookie过期时间的方法
2015/04/07 Javascript
jquery实现多屏多图焦点图切换特效的方法
2015/05/04 Javascript
JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果)
2015/09/24 Javascript
Bootstrap零基础入门教程(三)
2016/07/18 Javascript
javascript实现简易计算器
2017/02/01 Javascript
JS实现点击链接切换显示隐藏内容的方法
2017/10/19 Javascript
基于Vue的ajax公共方法(详解)
2018/01/20 Javascript
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
2018/05/09 jQuery
基于脚手架创建Vue项目实现步骤详解
2020/08/03 Javascript
vue 公共列表选择组件,引用Vant-UI的样式方式
2020/11/02 Javascript
在Python中使用PIL模块处理图像的教程
2015/04/29 Python
黑科技 Python脚本帮你找出微信上删除你好友的人
2016/01/07 Python
利用Python画ROC曲线和AUC值计算
2016/09/19 Python
在Python中使用gRPC的方法示例
2018/08/08 Python
解决python selenium3启动不了firefox的问题
2018/10/13 Python
Python线程之定位与销毁的实现
2019/02/17 Python
在python tkinter中Canvas实现进度条显示的方法
2019/06/14 Python
python的命名规则知识点总结
2019/10/04 Python
Python实现数值积分方式
2019/11/20 Python
css 元素选择器的简单实例
2016/05/23 HTML / CSS
css3给背景图片加颜色遮罩的方法
2019/11/05 HTML / CSS
TUMI马来西亚官方网站:国际领先的高品质商旅箱包品牌
2018/04/26 全球购物
给女儿的表扬信
2014/01/18 职场文书
《小草和大树》教学反思
2014/02/16 职场文书
人事专员的职责
2014/02/26 职场文书
小学生作文评语大全
2014/04/21 职场文书
合理化建议书
2015/02/04 职场文书
房地产销售员岗位职责
2015/04/11 职场文书
余世维讲座观后感
2015/06/11 职场文书
2015年法律事务部工作总结
2015/07/27 职场文书